Updating examples for enclusion in release.
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/.classpath b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/.classpath
index 3b8b9fd..1ce8dae 100644
--- a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/.classpath
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/.classpath
@@ -3,5 +3,6 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>

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

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

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

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

 </classpath>

diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/.project b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/.project
index 31027fa..53b6b69 100644
--- a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/.project
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/.project
@@ -16,6 +16,11 @@
 			</arguments>
 		</buildCommand>
 		<buildCommand>
+			<name>org.eclipse.amp.escape.amf.ide.escapeBuilder3</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.amp.amf.gen.ide.docBuilder</name>
 			<arguments>
 			</arguments>
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/DemographicPrisoner_sDilemma.metaabm b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/DemographicPrisoner_sDilemma.metaabm
new file mode 100644
index 0000000..6f483f5
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/DemographicPrisoner_sDilemma.metaabm
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metaabm:SContext xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:act="http://metaabm.org/act" xmlns:function="http://metaabm.org/function" xmlns:metaabm="http://metaabm.org/structure" label="Demographic Prisoner_s Dilemma" ID="demographicPrisoner_sDilemma" pluralLabel="Demographic Prisoner_s Dilemmas">
+  <attributes label="Player Count" ID="playerCount" pluralLabel="Player Counts" description="The number of players to create." sType="INTEGER" defaultValue="100"/>
+  <attributes label="Minimum Wealth" ID="minimumWealth" pluralLabel="Minimum Wealths" sType="INTEGER" defaultValue="20"/>
+  <attributes label="Maximum Wealth" ID="maximumWealth" pluralLabel="Maximum Wealths" sType="INTEGER" defaultValue="100"/>
+  <attributes label="Maximum Age" ID="maximumAge" pluralLabel="Maximum Ages" sType="INTEGER" defaultValue="100"/>
+  <attributes label="Payoff Cooperate Cooperate" ID="payoffCC" pluralLabel="Payoff Cooperate Cooperates" description="The change in wealth for a player when playing cooperate against cooperate." sType="INTEGER" defaultValue="2"/>
+  <attributes label="Payoff Cooperate Defect" ID="payoffCD" pluralLabel="Payoff Cooperate Defects" description="The change in wealth for a player when playing cooperate against defect." sType="INTEGER" defaultValue="-6"/>
+  <attributes label="Payoff Defect Cooperate" ID="payoffDC" pluralLabel="Payoff Defect Cooperates" description="The change in wealth for a player when playing defect against cooperate." sType="INTEGER" defaultValue="6"/>
+  <attributes label="Payoff Defect Defect" ID="payoffDD" pluralLabel="Payoff Defect Defects" description="The change in wealth for a player when both players defect." sType="INTEGER" defaultValue="-5"/>
+  <attributes label="Fission Wealth" ID="fissionWealth" pluralLabel="Fission Wealths" description="The wealth level at which an agent can fission." sType="INTEGER" defaultValue="11"/>
+  <attributes label="Inheirited Wealth" ID="inheiritedWealth" pluralLabel="Inheirited Wealths" description="The wealth that is passed from parent to child." sType="INTEGER" defaultValue="6"/>
+  <attributes label="Initial Wealth" ID="initialWealth" pluralLabel="Initial Wealths" description="The wealth initially assigned to an agent at the beginning of model run." sType="INTEGER" defaultValue="6"/>
+  <attributes label="Mutation Rate" ID="mutationRate" pluralLabel="Mutation Rates" description="The probabaility that a given agent will change strategies in a given period, expressed as a value from 0.0 to 1.0." sType="REAL" defaultValue=".1"/>
+  <attributes label="Death Age" ID="deathAge" pluralLabel="Death Ages" description="The number of periods before an agent will be removed from game when Die At Age rule is active." sType="INTEGER" defaultValue="100"/>
+  <attributes label="Birth Age" ID="birthAge" pluralLabel="Birth Ages" description="The actual age in years as determined by data set." sType="INTEGER" units="Years"/>
+  <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Acts">
+    <members xsi:type="act:ABuild" label="Build Demographic Prisonner's Dillema" ID="buildDemographicPrisonnersDillema" targets="//@rootActivity/@members[ID='createPlayers'] //@rootActivity/@members[ID='buildGrid']" selected="//@rootActivity/@members[ID='buildDemographicPrisonnersDillema']" agent="/" pluralLabel="Build Demographic Prisonner's Dillemas"/>
+    <members xsi:type="act:ACreateAgents" label="Create Players" ID="createPlayers" sources="//@rootActivity/@members[ID='buildDemographicPrisonnersDillema']" selected="//@rootActivity/@members[ID='buildDemographicPrisonnersDillema']" agent="//@agents[ID='player']" agentCount="//@attributes[ID='playerCount']"/>
+    <members xsi:type="act:ABuildGrid" label="Build Grid" ID="buildGrid" sources="//@rootActivity/@members[ID='buildDemographicPrisonnersDillema']" selected="//@rootActivity/@members[ID='buildDemographicPrisonnersDillema']" pluralLabel="Build Grids" agents="//@agents[ID='player']" projection="//@projections[ID='gameSpace']" fillAgent="//@agents[ID='playCell']"/>
+  </rootActivity>
+  <implementation package="edu.brook" className="DemographicPrisonersDilemma" basePath=""/>
+  <agents label="Player" ID="player" pluralLabel="Players">
+    <attributes label="Cooperate" ID="cooperate" pluralLabel="Cooperates" gatherData="true"/>
+    <attributes label="Age" ID="age" pluralLabel="Ages" sType="INTEGER" gatherData="true"/>
+    <attributes label="Wealth" ID="wealth" pluralLabel="Wealths" sType="INTEGER" gatherData="true"/>
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Acts">
+      <members xsi:type="act:AInitialize" label="Initialize" ID="initialize" targets="//@agents[ID='player']/@rootActivity/@members[ID='randomToMaxAge'] //@agents[ID='player']/@rootActivity/@members[ID='randomStrategy'] //@agents[ID='player']/@rootActivity/@members[ID='setWealthToInitialWealth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Initializes"/>
+      <members xsi:type="act:AInitialize" label="Move To Random Location" ID="moveToRandomLocation" targets="//@agents[ID='player']/@rootActivity/@members[ID='randomCell2']" selected="//@agents[ID='player']/@rootActivity/@members[ID='moveToRandomLocation']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Move To Random Locations"/>
+      <members xsi:type="act:AEvaluate" label="Random To Max Age" ID="randomToMaxAge" sources="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setRandomAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" value="//@attributes[ID='maximumAge']"/>
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomToLimit']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Random Age" ID="setRandomAge" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomToMaxAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" attribute="//@agents[ID='player']/@attributes[ID='age']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='randomToMaxAge']"/>
+      <members xsi:type="act:AEvaluate" label="Random Strategy" ID="randomStrategy" sources="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setRandomStrategy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomIs']"/>
+      </members>
+      <members xsi:type="act:ASelect" label="Random Neighbor" ID="randomNeighbor" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomWalk']" targets="//@agents[ID='player']/@rootActivity/@members[ID='neighbor'] //@agents[ID='player']/@rootActivity/@members[ID='available']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomWalk']" agent="//@agents[ID='playCell']" space="//@projections[ID='gameSpace']"/>
+      <members xsi:type="act:AQuery" label="Neighbor" ID="neighbor" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='availableNeighbor']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='neighbor']"/>
+      </members>
+      <members xsi:type="act:AMove" label="Move to Demographic Prisonners Dillema in Game Space" ID="movetoDemographicPrisonnersDillemainGameSpace" sources="//@agents[ID='player']/@rootActivity/@members[ID='availableNeighbor']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomWalk']" destination="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']"/>
+      <members xsi:type="act:ARule" label="Random Walk" ID="randomWalk" targets="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomWalk']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Random Walks"/>
+      <members xsi:type="act:ARule" label="Play Neighbor" ID="playNeighbor" targets="//@agents[ID='player']/@rootActivity/@members[ID='playerDefect'] //@agents[ID='player']/@rootActivity/@members[ID='playerCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Play Neighbors"/>
+      <members xsi:type="act:ASet" label="Set Random Strategy" ID="setRandomStrategy" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomStrategy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" attribute="//@agents[ID='player']/@attributes[ID='cooperate']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='randomStrategy']"/>
+      <members xsi:type="act:ASelect" label="Random Cell 2" ID="randomCell2" sources="//@agents[ID='player']/@rootActivity/@members[ID='moveToRandomLocation']" targets="//@agents[ID='player']/@rootActivity/@members[ID='spaceAvailable']" selected="//@agents[ID='player']/@rootActivity/@members[ID='moveToRandomLocation']" agent="//@agents[ID='playCell']" space="//@projections[ID='gameSpace']"/>
+      <members xsi:type="act:AMove" label="Move to Player in Game Spac" ID="movetoPlayerinGameSpac" sources="//@agents[ID='player']/@rootActivity/@members[ID='spaceAvailable']" selected="//@agents[ID='player']/@rootActivity/@members[ID='moveToRandomLocation']" destination="//@agents[ID='player']/@rootActivity/@members[ID='randomCell2']"/>
+      <members xsi:type="act:ARule" label="Update Age" ID="updateAge" targets="//@agents[ID='player']/@rootActivity/@members[ID='incrementAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='updateAge']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Update Ages" description="Increment the Age by One."/>
+      <members xsi:type="act:AEvaluate" label="Increment Age" ID="incrementAge" sources="//@agents[ID='player']/@rootActivity/@members[ID='updateAge']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setToCopyCopyCopyCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='updateAge']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='updateAge']" value="//@agents[ID='player']/@attributes[ID='age']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='increment']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set [?] To [?] Copy Copy Copy Copy" ID="setToCopyCopyCopyCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='incrementAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='updateAge']" attribute="//@agents[ID='player']/@attributes[ID='age']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='incrementAge']"/>
+      <members xsi:type="act:ARule" label="Fission Rule" ID="fissionRule" targets="//@agents[ID='player']/@rootActivity/@members[ID='wealthGreaterorEqualFissionWealth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Fission Rules"/>
+      <members xsi:type="act:ARule" label="Die At Age" ID="dieAtAge" targets="//@agents[ID='player']/@rootActivity/@members[ID='ageGreaterDeathAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Die At Ages"/>
+      <members xsi:type="act:AQuery" label="Age Greater Death Age" ID="ageGreaterDeathAge" sources="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']" targets="//@agents[ID='player']/@rootActivity/@members[ID='playerDieinDieAtAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']" value="//@agents[ID='player']/@attributes[ID='age']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']" value="//@attributes[ID='deathAge']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='greater']"/>
+      </members>
+      <members xsi:type="act:ADie" label="Player Die in Die At Age" ID="playerDieinDieAtAge" sources="//@agents[ID='player']/@rootActivity/@members[ID='ageGreaterDeathAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']" destination="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']"/>
+      <members xsi:type="act:ARule" label="Die At Wealth 0" ID="dieAtWealth0" targets="//@agents[ID='player']/@rootActivity/@members[ID='wealthLesserLiteral0']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Die At Wealth 0s"/>
+      <members xsi:type="act:AQuery" label="Wealth Lesser Literal 0" ID="wealthLesserLiteral0" sources="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']" targets="//@agents[ID='player']/@rootActivity/@members[ID='playerDieinDieAtWealth0']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']" value="//@agents[ID='player']/@rootActivity/@members[ID='wealthLesserLiteral0']/@inputs.1/@literal">
+          <literal label="Literal 0" ID="literal0" valueLiteral="0"/>
+        </inputs>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='lesser']"/>
+      </members>
+      <members xsi:type="act:ADie" label="Player Die in Die At Wealth 0" ID="playerDieinDieAtWealth0" sources="//@agents[ID='player']/@rootActivity/@members[ID='wealthLesserLiteral0']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']" destination="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']"/>
+      <members xsi:type="act:ASelect" label="Other Player" ID="otherPlayer" sources="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='spaceNeighborCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']"/>
+      <members xsi:type="act:AQuery" label="Space Available" ID="spaceAvailable" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomCell2']" targets="//@agents[ID='player']/@rootActivity/@members[ID='movetoPlayerinGameSpac']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomCell2']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Available" ID="available" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='availableNeighbor']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Space Neighbor Copy" ID="spaceNeighborCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" targets="//@agents[ID='player']/@rootActivity/@members[ID='otherCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='otherDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='neighbor']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Available Neighbor" ID="availableNeighbor" sources="//@agents[ID='player']/@rootActivity/@members[ID='available'] //@agents[ID='player']/@rootActivity/@members[ID='neighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='movetoDemographicPrisonnersDillemainGameSpace']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']"/>
+      <members xsi:type="act:AQuery" label="Player Cooperate" ID="playerCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='bothCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='cooperateDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identity']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Other Cooperate" ID="otherCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='spaceNeighborCopy']" targets="//@agents[ID='player']/@rootActivity/@members[ID='bothCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='defectCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identity']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Other Defect" ID="otherDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='spaceNeighborCopy']" targets="//@agents[ID='player']/@rootActivity/@members[ID='cooperateDefect'] //@agents[ID='player']/@rootActivity/@members[ID='bothDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='not']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Player Defect" ID="playerDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='defectCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='bothDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='not']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Both Cooperate" ID="bothCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='otherCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='playerCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']"/>
+      <members xsi:type="act:AAll" label="Defect Cooperate" ID="defectCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='otherCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='playerDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']"/>
+      <members xsi:type="act:AAll" label="Cooperate Defect" ID="cooperateDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='otherDefect'] //@agents[ID='player']/@rootActivity/@members[ID='playerCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefect'] //@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']"/>
+      <members xsi:type="act:AAll" label="Both Defect" ID="bothDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='playerDefect'] //@agents[ID='player']/@rootActivity/@members[ID='otherDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefect'] //@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']"/>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Defect Cooperate" ID="valueWealthAddPayoffDefectCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='defectCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffDefectCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@attributes[ID='payoffDC']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Cooperate Cooperate" ID="valueWealthAddPayoffCooperateCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='bothCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffCooperateCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@attributes[ID='payoffCC']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Defect Defect" ID="valueWealthAddPayoffDefectDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='bothDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffDefectDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@attributes[ID='payoffDD']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Cooperate Defect" ID="valueWealthAddPayoffCooperateDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='cooperateDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffCooperateDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@attributes[ID='payoffCD']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Defect Cooperate" ID="setWealthToValueWealthAddPayoffDefectCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperate']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Defect Defect" ID="setWealthToValueWealthAddPayoffDefectDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefect']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Cooperate Cooperate" ID="setWealthToValueWealthAddPayoffCooperateCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperate']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Cooperate Defect" ID="setWealthToValueWealthAddPayoffCooperateDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefect']"/>
+      <members xsi:type="act:AQuery" label="Wealth Greater or Equal Fission Wealth" ID="wealthGreaterorEqualFissionWealth" sources="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" targets="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']" selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" value="//@attributes[ID='fissionWealth']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='greaterorEqual']"/>
+      </members>
+      <members xsi:type="act:ACreateAgents" label="Create Agents" ID="createAgents" sources="//@agents[ID='player']/@rootActivity/@members[ID='neighborAvailableforBirth']" targets="//@agents[ID='player']/@rootActivity/@members[ID='movetoPlayerinGameSpaceCopy'] //@agents[ID='player']/@rootActivity/@members[ID='valueRandomUnit'] //@agents[ID='player']/@rootActivity/@members[ID='wealthChildWealth'] //@agents[ID='player']/@rootActivity/@members[ID='setWealthToInheiritedWealth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']"/>
+      <members xsi:type="act:AQuery" label="Birth Neighbor" ID="birthNeighbor" sources="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']" targets="//@agents[ID='player']/@rootActivity/@members[ID='neighborAvailableforBirth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='neighbor']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Space Available Copy Copy" ID="spaceAvailableCopyCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']" targets="//@agents[ID='player']/@rootActivity/@members[ID='neighborAvailableforBirth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Neighbor Available for Birth" ID="neighborAvailableforBirth" sources="//@agents[ID='player']/@rootActivity/@members[ID='birthNeighbor'] //@agents[ID='player']/@rootActivity/@members[ID='spaceAvailableCopyCopy']" targets="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" selected="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']"/>
+      <members xsi:type="act:AMove" label="Move to Player in Game Space Copy" ID="movetoPlayerinGameSpaceCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" destination="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']"/>
+      <members xsi:type="act:ASelect" label="Birth Location" ID="birthLocation" sources="//@agents[ID='player']/@rootActivity/@members[ID='wealthGreaterorEqualFissionWealth']" targets="//@agents[ID='player']/@rootActivity/@members[ID='birthNeighbor'] //@agents[ID='player']/@rootActivity/@members[ID='spaceAvailableCopyCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" agent="//@agents[ID='playCell']" space="//@projections[ID='gameSpace']"/>
+      <members xsi:type="act:ASet" label="Set Cooperate To Cooperate" ID="setCooperateToCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='not_ValueRandomUnitLesserMutationRate_']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" attribute="//@agents[ID='player']/@attributes[ID='cooperate']" parameter="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+      <members xsi:type="act:AEvaluate" label="Value Random Unit" ID="valueRandomUnit" sources="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" targets="//@agents[ID='player']/@rootActivity/@members[ID='mutationDraw']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']">
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomUnit']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Mutation Draw" ID="mutationDraw" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueRandomUnit']" targets="//@agents[ID='player']/@rootActivity/@members[ID='valueRandomBoolean'] //@agents[ID='player']/@rootActivity/@members[ID='not_ValueRandomUnitLesserMutationRate_']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" value="//@agents[ID='player']/@rootActivity/@members[ID='valueRandomUnit']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" value="//@attributes[ID='mutationRate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='lesser']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Value Random Boolean" ID="valueRandomBoolean" sources="//@agents[ID='player']/@rootActivity/@members[ID='mutationDraw']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setCooperateToValueRandomBoolean']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomIs']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Cooperate To Value Random Boolean" ID="setCooperateToValueRandomBoolean" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueRandomBoolean']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" attribute="//@agents[ID='player']/@attributes[ID='cooperate']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueRandomBoolean']"/>
+      <members xsi:type="act:ANone" label="!(Value Random Unit Lesser Mutation Rate)" ID="not_ValueRandomUnitLesserMutationRate_" sources="//@agents[ID='player']/@rootActivity/@members[ID='mutationDraw']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setCooperateToCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']"/>
+      <members xsi:type="act:AEvaluate" label="Remaining Wealth" ID="wealthChildWealth" sources="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToWealthChildWealth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" value="//@attributes[ID='inheiritedWealth']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='sub']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Wealth To Remaining Wealth" ID="setWealthToWealthChildWealth" sources="//@agents[ID='player']/@rootActivity/@members[ID='wealthChildWealth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='wealthChildWealth']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Inheirited Wealth" ID="setWealthToInheiritedWealth" sources="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@attributes[ID='inheiritedWealth']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Initial Wealth" ID="setWealthToInitialWealth" sources="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@attributes[ID='initialWealth']"/>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Cooperate Defect Copy" ID="valueWealthAddPayoffCooperateDefectCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='defectCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffCooperateDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@attributes[ID='payoffCD']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Cooperate Defect Copy" ID="setWealthToValueWealthAddPayoffCooperateDefectCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefectCopy']"/>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Defect Defect Copy" ID="valueWealthAddPayoffDefectDefectCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='bothDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffDefectDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@attributes[ID='payoffDD']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Cooperate Cooperate Copy" ID="valueWealthAddPayoffCooperateCooperateCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='bothCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffCooperateCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@attributes[ID='payoffCC']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Cooperate Cooperate Copy" ID="setWealthToValueWealthAddPayoffCooperateCooperateCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperateCopy']"/>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Defect Cooperate Copy" ID="valueWealthAddPayoffDefectCooperateCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='cooperateDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffDefectCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@attributes[ID='payoffDC']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Defect Cooperate Copy" ID="setWealthToValueWealthAddPayoffDefectCooperateCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperateCopy']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Defect Defect Copy" ID="setWealthToValueWealthAddPayoffDefectDefectCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefectCopy']"/>
+    </rootActivity>
+    <implementation className="Player"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Cooperate Defect Style" ID="cooperateDefectStyle" pluralLabel="Cooperate Defect Styles">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Acts">
+        <members xsi:type="act:ARule" label="Player Rule" ID="playerRule" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='identityCooperate']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Player Rules"/>
+        <members xsi:type="act:AQuery" label="Identity Cooperate" ID="identityCooperate" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='defector'] //@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleColorBlue']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']">
+          <inputs selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']" value="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+          <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identity']"/>
+        </members>
+        <members xsi:type="act:ANone" label="Defector" ID="defector" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='identityCooperate']" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleColorRed']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']"/>
+        <members xsi:type="act:AEvaluate" label="Player Rule: Color Blue()" ID="playerRuleColorBlue" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='identityCooperate']" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleShapeOval']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorBlue']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Player Rule: Color Red()" ID="playerRuleColorRed" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='defector']" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleShapeOval']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorRed']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Player Rule: Shape Oval()" ID="playerRuleShapeOval" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleColorRed'] //@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleColorBlue']" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleGraphicFill']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeOval']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Player Rule: Graphic Fill()" ID="playerRuleGraphicFill" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleShapeOval']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+      </rootActivity>
+      <implementation className="CooperateDefectStyle"/>
+    </styles>
+  </agents>
+  <agents label="Play Cell" ID="playCell" pluralLabel="Play Cells">
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Acts"/>
+    <implementation className="PlayCell"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Play Cell Style 2D" ID="playCellStyle2D" pluralLabel="Play Cell Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="PlayCell Rule" ID="playCellRule" targets="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRuleColorGreen']" selected="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRule']" agent="//@agents[ID='playCell']" space="//@projections[ID='gameSpace']" pluralLabel="PlayCell Rules"/>
+        <members xsi:type="act:AEvaluate" label="PlayCell Rule: Color Green()" ID="playCellRuleColorGreen" sources="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRule']" targets="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRuleShapeRectangle']" selected="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorGreen']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="PlayCell Rule: Shape Rectangle()" ID="playCellRuleShapeRectangle" sources="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRuleColorGreen']" targets="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRuleGraphicFill']" selected="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeRectangle']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="PlayCell Rule: Graphic Fill()" ID="playCellRuleGraphicFill" sources="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRuleShapeRectangle']" selected="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+      </rootActivity>
+      <implementation className="PlayCellStyle"/>
+    </styles>
+  </agents>
+  <projections xsi:type="metaabm:SGrid" label="Game Space" ID="gameSpace" pluralLabel="Game Spaces" dimensionality="2" borderRule="PERIODIC" neighborhood="VON_NEUMANN">
+    <attributes xsi:type="metaabm:SAttributeArray" label="Dimensions" ID="dimensions" pluralLabel="Dimensionss" description="The size of each dimension." sType="INTEGER" size="2"/>
+    <attributes label="Width" ID="width" pluralLabel="Widths" description="The horizontal extent of the space." sType="INTEGER" defaultValue="20"/>
+    <attributes label="Height" ID="height" pluralLabel="Heights" description="The vertical extent of the space." sType="INTEGER" defaultValue="20"/>
+  </projections>
+</metaabm:SContext>
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/Epidemic.metaabm b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/Epidemic.metaabm
new file mode 100644
index 0000000..9973f55
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/Epidemic.metaabm
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metaabm:SContext xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:act="http://metaabm.org/act" xmlns:function="http://metaabm.org/function" xmlns:metaabm="http://metaabm.org/metaabm.org/structure" label="Epidemic" ID="epidemic" pluralLabel="Epidemics" description="A simple model of epidemic dynamics. We define individual agents with different disease states. The progression of disease moves from succeptible to exposed to infectious (either symptomatic or asymptomatic) to some outcome state. Agents can transmit infection to their immediate neighbors.&#xA;&#xA;For some background on the general approach, see Joshua M. Epstein. &quot;Generative Social Science&quot;. 2006. Princeton. &#xA;&#xA;Copyright 2009, Miles Parker. Released under Eclipse Public License. All uses should be attributed.">
+  <attributes label="Individual Count" ID="individualCount" pluralLabel="Individual Counts" description="The number of individuals to create." sType="INTEGER" defaultValue="250"/>
+  <attributes label="Initial Infection Probability" ID="initialInfectionProbability" pluralLabel="Initial Infection Probabilitys" description="The probability that any given individual will be infected at the beginning of the model run. For example, if this value is .15, and their are 100 individuals in the model, roughly 15 of those individuals will be infected at time 0." sType="REAL" defaultValue=".05"/>
+  <attributes label="Min Contact Transmission Probability" ID="minContactTransmissionProbability" pluralLabel="Min Contact Transmission Probabilitys" description="The minimum probability that proximity to a single neighbor for a single period will result in transmission of infection. At the start of each model run, each individual is assigned a contact transmission probability between the minimum and maximum value. For example, if this value was .08 and the maximum value was 0.12 a given individual could have any value between those two, but the average transmission probability would be around .1. If minium and maximum values are the same, then all individuals will have the same chance of passing along infection to a given neighbor. This value must be between 0.0 and 1.0 and less than or equal to Max Contact transmission Probability." sType="REAL" defaultValue=".08"/>
+  <attributes label="Max Contact Transmission Probability" ID="maxContactTransmissionProbability" pluralLabel="Max Contact Transmission Probabilitys" description="The maximum probability that proximity to a single neighbor for a single period will result in transmission of infection. See Min Contact Probability for more information. Must be a value between 0.0 and 1.0 and greater or equal to Min Contact Transmission Probability." sType="REAL" defaultValue=".16"/>
+  <attributes label="Case Mortality Rate" ID="caseMortalityRate" pluralLabel="Case Mortality Rates" description="The current probability that death will occur for a given individual as a result of infection. Some number between 0.0 and 1.0." sType="REAL" defaultValue=".05"/>
+  <attributes label="Periods per Day" ID="periodsperDay" pluralLabel="Periods per Days" sType="INTEGER" defaultValue="24"/>
+  <attributes label="Min Period Exposure" ID="minPeriodExposure" pluralLabel="Min Period Exposures" description="The minimum amount of time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater." sType="INTEGER" defaultValue="15"/>
+  <attributes label="Max Period Exposure" ID="maxPeriodExposure" pluralLabel="Max Period Exposures" description="Maximum time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater." sType="INTEGER" defaultValue="24"/>
+  <attributes label="Min Period Asymptom Infection" ID="minPeriodAsymptomInfection" pluralLabel="Min Period Asymptom Infections" description="Maximum time spent infected without showing symptoms. 0 or greater." sType="INTEGER" defaultValue="24"/>
+  <attributes label="Max Period Asymptom Infection" ID="maxPeriodAsymptomInfection" pluralLabel="Max Period Asymptom Infections" description="Maximum time spent infected without showing symptoms. May be zero!" sType="INTEGER" defaultValue="48"/>
+  <attributes label="Min Period Symptom Infection" ID="minPeriodSymptomInfection" pluralLabel="Min Period Symptom Infections" description="Minimum time spent infected with obvious symptoms. 0 or greater." sType="INTEGER" defaultValue="24"/>
+  <attributes label="Max Period Symptom Infection" ID="maxPeriodSymptomInfection" pluralLabel="Max Period Symptom Infections" description="Maximum time spent infected with obvious symptoms. 1 or greater." sType="INTEGER" defaultValue="168"/>
+  <attributes label="Movement Probability" ID="movementProbability" pluralLabel="Movement Probabilitys" description="The chance that an agent will move within a given period. May be any value between 0.0 and 1.0." sType="REAL" defaultValue=".5"/>
+  <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+    <members xsi:type="act:ABuild" label="Build Epidemic" ID="buildEpidemic" targets="//@rootActivity/@members[ID='createIndividuals'] //@rootActivity/@members[ID='buildCity']" selected="//@rootActivity/@members[ID='buildEpidemic']" agent="/" pluralLabel="Build Epidemics"/>
+    <members xsi:type="act:ACreateAgents" label="Create Individuals" ID="createIndividuals" sources="//@rootActivity/@members[ID='buildEpidemic']" selected="//@rootActivity/@members[ID='buildEpidemic']" agent="//@agents[ID='individual']" agentCount="//@attributes[ID='individualCount']"/>
+    <members xsi:type="act:ABuildGrid" label="Build City" ID="buildCity" sources="//@rootActivity/@members[ID='buildEpidemic']" selected="//@rootActivity/@members[ID='buildEpidemic']" pluralLabel="Build Citys" agents="//@agents[ID='individual']" projection="//@projections[ID='city']" fillAgent="//@agents[ID='location']"/>
+    <members xsi:type="act:AInitialize" label="Initialize Probabilities" ID="initializeProbabilities" selected="//@rootActivity/@members[ID='initializeProbabilities']" agent="/" pluralLabel="Initialize Probabilitiess"/>
+  </rootActivity>
+  <implementation package="name.milesparker.epi" className="Epidemic" basePath=""/>
+  <agents label="Individual" ID="individual" pluralLabel="Individuals">
+    <attributes xsi:type="metaabm:SState" label="Status" ID="status" pluralLabel="Statuss" sType="SYMBOL" gatherData="true" defaultValue="Susceptible" defaultOption="//@agents[ID='individual']/@attributes[ID='status']/@options.0">
+      <options label="Susceptible" ID="susceptible" pluralLabel="Susceptibles"/>
+      <options label="Exposed" ID="exposed" pluralLabel="Exposeds"/>
+      <options label="Asymptom Infectious" ID="asymptomInfectious" pluralLabel="Asymptom Infectiouss"/>
+      <options label="Symptom Infectious" ID="symptomInfectious" pluralLabel="Symptom Infectiouss"/>
+      <options label="Recovered" ID="recovered" pluralLabel="Recovereds"/>
+      <options label="Dead" ID="dead" pluralLabel="Deads"/>
+    </attributes>
+    <attributes label="Exposure End Period" ID="exposureEndPeriod" pluralLabel="Exposure Days" sType="INTEGER" gatherData="true"/>
+    <attributes label="Asymptomatic End Period" ID="asymptomaticEndPeriod" pluralLabel="Asymptomatic End Periods" sType="INTEGER"/>
+    <attributes label="Outcome Period" ID="outcomePeriod" pluralLabel="Outcome Periods" sType="INTEGER"/>
+    <attributes label="Contact Transmission Probability" ID="contactTransmissionProbability" pluralLabel="Contact Transmission Probabilites" sType="REAL" gatherData="true"/>
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+      <members xsi:type="act:AInitialize" label="Initialize Location" ID="initializeLocation" targets="//@agents[ID='individual']/@rootActivity/@members[ID='cityLocation']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeLocation']" agent="//@agents[ID='individual']" space="//@projections[ID='city']" pluralLabel="Initialize Locations"/>
+      <members xsi:type="act:ASelect" label="City Location" ID="cityLocation" sources="//@agents[ID='individual']/@rootActivity/@members[ID='initializeLocation']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='cityLocationAvailableQuery']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeLocation']" agent="//@agents[ID='location']" space="//@projections[ID='city']"/>
+      <members xsi:type="act:AQuery" label="City Location: Available() Query" ID="cityLocationAvailableQuery" sources="//@agents[ID='individual']/@rootActivity/@members[ID='cityLocation']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='moveIndividual']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='cityLocation']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AMove" label="Move Individual" ID="moveIndividual" sources="//@agents[ID='individual']/@rootActivity/@members[ID='cityLocationAvailableQuery']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeLocation']" destination="//@agents[ID='individual']/@rootActivity/@members[ID='cityLocation']"/>
+      <members xsi:type="act:ARule" label="Movement" ID="movement" targets="//@agents[ID='individual']/@rootActivity/@members[ID='movementDraw']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']" agent="//@agents[ID='individual']" space="//@projections[ID='city']" pluralLabel="Movements"/>
+      <members xsi:type="act:ASelect" label="Neighboring Location" ID="neighboringLocation" sources="//@agents[ID='individual']/@rootActivity/@members[ID='movement_StatusDifferentDeadQueryAndStatusDifferentSymptomInfectiousQuery_']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='available'] //@agents[ID='individual']/@rootActivity/@members[ID='neighbor']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']" agent="//@agents[ID='location']" space="//@projections[ID='city']"/>
+      <members xsi:type="act:AQuery" label="Available" ID="available" sources="//@agents[ID='individual']/@rootActivity/@members[ID='neighboringLocation']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='availableNeighboring']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='neighboringLocation']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Neighbor" ID="neighbor" sources="//@agents[ID='individual']/@rootActivity/@members[ID='neighboringLocation']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='availableNeighboring']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='neighboringLocation']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='neighbor']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Available Neighboring" ID="availableNeighboring" sources="//@agents[ID='individual']/@rootActivity/@members[ID='available'] //@agents[ID='individual']/@rootActivity/@members[ID='neighbor']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='moveIndividualCopy']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='neighboringLocation']"/>
+      <members xsi:type="act:AMove" label="Move Individual Copy" ID="moveIndividualCopy" sources="//@agents[ID='individual']/@rootActivity/@members[ID='availableNeighboring']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']" destination="//@agents[ID='individual']/@rootActivity/@members[ID='neighboringLocation']"/>
+      <members xsi:type="act:AInitialize" label="Initialize State" ID="initializeState" targets="//@agents[ID='individual']/@rootActivity/@members[ID='infectionDraw'] //@agents[ID='individual']/@rootActivity/@members[ID='individualTransmissionRate']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']" agent="//@agents[ID='individual']" space="//@projections[ID='city']" pluralLabel="Initialize States"/>
+      <members xsi:type="act:AEvaluate" label="Infection Draw" ID="infectionDraw" sources="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='initializeStateInfectionDrawLesserInitialInfectionProbabilityQuery']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']">
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomUnit']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Initialize State: Infection Draw Lesser Initial Infection Probability Query" ID="initializeStateInfectionDrawLesserInitialInfectionProbabilityQuery" sources="//@agents[ID='individual']/@rootActivity/@members[ID='infectionDraw']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setStatusToExposed']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']" value="//@agents[ID='individual']/@rootActivity/@members[ID='infectionDraw']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']" value="//@attributes[ID='initialInfectionProbability']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='lesser']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Status To Exposed" ID="setStatusToExposed" sources="//@agents[ID='individual']/@rootActivity/@members[ID='initializeStateInfectionDrawLesserInitialInfectionProbabilityQuery']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']" attribute="//@agents[ID='individual']/@attributes[ID='status']" parameter="//@agents[ID='individual']/@attributes[ID='status']/@options.1"/>
+      <members xsi:type="act:ARule" label="Transmission" ID="transmission" targets="//@agents[ID='individual']/@rootActivity/@members[ID='transmitStatusIdenticalInfectiousQuery'] //@agents[ID='individual']/@rootActivity/@members[ID='transmissionStatusIdenticalSymptomInfectiousQuery']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']" agent="//@agents[ID='individual']" space="//@projections[ID='city']" pluralLabel="Transmissions"/>
+      <members xsi:type="act:AQuery" label="Transmit: Status Identical Infectious Query" ID="transmitStatusIdenticalInfectiousQuery" sources="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='transmission_StatusIdenticalSymptomInfectiousQueryOrTransmitStatusIdenticalInfectiousQuery_']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.2"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+      </members>
+      <members xsi:type="act:ASelect" label="Vulnerable" ID="vulnerable" sources="//@agents[ID='individual']/@rootActivity/@members[ID='transmission_StatusIdenticalSymptomInfectiousQueryOrTransmitStatusIdenticalInfectiousQuery_']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerableNeighbor']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']" agent="//@agents[ID='individual']" space="//@projections[ID='city']"/>
+      <members xsi:type="act:AQuery" label="Vulnerable Neighbor" ID="vulnerableNeighbor" sources="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='individualCopyCopy_Unspecified_QueryCopy']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='neighbor']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Individual Copy Copy: [Unspecified]() Query Copy" ID="individualCopyCopy_Unspecified_QueryCopy" sources="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerableNeighbor']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='transmissionDraw']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.0"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Transmission Draw" ID="transmissionDraw" sources="//@agents[ID='individual']/@rootActivity/@members[ID='individualCopyCopy_Unspecified_QueryCopy']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='transmitted']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']">
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomUnit']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Transmitted" ID="transmitted" sources="//@agents[ID='individual']/@rootActivity/@members[ID='transmissionDraw']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setStatusToExposedCopy']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']" value="//@agents[ID='individual']/@rootActivity/@members[ID='transmissionDraw']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']" value="//@agents[ID='individual']/@attributes[ID='contactTransmissionProbability']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='lesser']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Status To Exposed Copy" ID="setStatusToExposedCopy" sources="//@agents[ID='individual']/@rootActivity/@members[ID='transmitted']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']" attribute="//@agents[ID='individual']/@attributes[ID='status']" parameter="//@agents[ID='individual']/@attributes[ID='status']/@options.1"/>
+      <members xsi:type="act:ARule" label="Progression" ID="progression" targets="//@agents[ID='individual']/@rootActivity/@members[ID='progressionPeriod']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" agent="//@agents[ID='individual']" space="//@projections[ID='city']" pluralLabel="Progressions"/>
+      <members xsi:type="act:AQuery" label="Exposure Ends" ID="exposureEnds" sources="//@agents[ID='individual']/@rootActivity/@members[ID='progressionPeriod']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='exposureEndsNoAsymptomatic'] //@agents[ID='individual']/@rootActivity/@members[ID='exposureEndsAsymtomatic']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@rootActivity/@members[ID='progressionPeriod']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@attributes[ID='exposureEndPeriod']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Infection Ends" ID="infectionEnds" sources="//@agents[ID='individual']/@rootActivity/@members[ID='progressionPeriod']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='mortalityDraw']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@rootActivity/@members[ID='progressionPeriod']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@attributes[ID='outcomePeriod']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Progression: Mortality Draw Lesser Case Mortality Rate Query" ID="progressionMortalityDrawLesserCaseMortalityRateQuery" sources="//@agents[ID='individual']/@rootActivity/@members[ID='mortalityDraw']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setStatusToDead'] //@agents[ID='individual']/@rootActivity/@members[ID='survived']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@rootActivity/@members[ID='mortalityDraw']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@attributes[ID='caseMortalityRate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='lesser']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Mortality Draw" ID="mortalityDraw" sources="//@agents[ID='individual']/@rootActivity/@members[ID='infectionEnds']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='progressionMortalityDrawLesserCaseMortalityRateQuery']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']">
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomUnit']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Status To Dead" ID="setStatusToDead" sources="//@agents[ID='individual']/@rootActivity/@members[ID='progressionMortalityDrawLesserCaseMortalityRateQuery']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" attribute="//@agents[ID='individual']/@attributes[ID='status']" parameter="//@agents[ID='individual']/@attributes[ID='status']/@options.5"/>
+      <members xsi:type="act:ANone" label="Survived" ID="survived" sources="//@agents[ID='individual']/@rootActivity/@members[ID='progressionMortalityDrawLesserCaseMortalityRateQuery']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setStatusToRecovered']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']"/>
+      <members xsi:type="act:ASet" label="Set Status To Recovered" ID="setStatusToRecovered" sources="//@agents[ID='individual']/@rootActivity/@members[ID='survived']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" attribute="//@agents[ID='individual']/@attributes[ID='status']" parameter="//@agents[ID='individual']/@attributes[ID='status']/@options.4"/>
+      <members xsi:type="act:AWatch" label="Exposure" ID="exposure" targets="//@agents[ID='individual']/@rootActivity/@members[ID='exposureStatusIdenticalExposedQuery']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" attribute="//@agents[ID='individual']/@attributes[ID='status']" agent="//@agents[ID='individual']" space="//@projections[ID='city']"/>
+      <members xsi:type="act:AEvaluate" label="Exposure Length" ID="exposureLength" sources="//@agents[ID='individual']/@rootActivity/@members[ID='exposureNow']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='endExposure']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@attributes[ID='minPeriodExposure']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@attributes[ID='maxPeriodExposure']"/>
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomInRange']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Exposure End Period To End Exposure" ID="setExposureEndPeriodToEndExposure" sources="//@agents[ID='individual']/@rootActivity/@members[ID='endExposure']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" attribute="//@agents[ID='individual']/@attributes[ID='exposureEndPeriod']" parameter="//@agents[ID='individual']/@rootActivity/@members[ID='endExposure']"/>
+      <members xsi:type="act:AEvaluate" label="End Exposure" ID="endExposure" sources="//@agents[ID='individual']/@rootActivity/@members[ID='exposureLength']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setExposureEndPeriodToEndExposure'] //@agents[ID='individual']/@rootActivity/@members[ID='asymptomaticLength']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@agents[ID='individual']/@rootActivity/@members[ID='exposureNow']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@agents[ID='individual']/@rootActivity/@members[ID='exposureLength']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Exposure: Now()" ID="exposureNow" sources="//@agents[ID='individual']/@rootActivity/@members[ID='exposureStatusIdenticalExposedQuery']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='exposureLength']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']">
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='time']/@functions[ID='timeNow']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Asymptomatic Length" ID="asymptomaticLength" sources="//@agents[ID='individual']/@rootActivity/@members[ID='endExposure']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='endAsymptomatic']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@attributes[ID='minPeriodAsymptomInfection']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@attributes[ID='maxPeriodAsymptomInfection']"/>
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomInRange']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="End Asymptomatic" ID="endAsymptomatic" sources="//@agents[ID='individual']/@rootActivity/@members[ID='asymptomaticLength']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setAsymptomaticEndPeriodToEndAsymptomatic'] //@agents[ID='individual']/@rootActivity/@members[ID='symptomLength']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@agents[ID='individual']/@rootActivity/@members[ID='endExposure']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@agents[ID='individual']/@rootActivity/@members[ID='asymptomaticLength']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Asymptomatic End Period To End Asymptomatic" ID="setAsymptomaticEndPeriodToEndAsymptomatic" sources="//@agents[ID='individual']/@rootActivity/@members[ID='endAsymptomatic']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" attribute="//@agents[ID='individual']/@attributes[ID='asymptomaticEndPeriod']" parameter="//@agents[ID='individual']/@rootActivity/@members[ID='endAsymptomatic']"/>
+      <members xsi:type="act:AQuery" label="Exposure: Status Identical Exposed Query" ID="exposureStatusIdenticalExposedQuery" sources="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='exposureNow']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.1"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Progression Period" ID="progressionPeriod" sources="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='exposureEnds'] //@agents[ID='individual']/@rootActivity/@members[ID='infectionEnds'] //@agents[ID='individual']/@rootActivity/@members[ID='noAsymptomaticPeriod'] //@agents[ID='individual']/@rootActivity/@members[ID='asymptomaticPeriodExists'] //@agents[ID='individual']/@rootActivity/@members[ID='asmytomaticEnds']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']">
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='time']/@functions[ID='timeNow']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Symptom Length" ID="symptomLength" sources="//@agents[ID='individual']/@rootActivity/@members[ID='endAsymptomatic']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='endInfection']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@attributes[ID='minPeriodSymptomInfection']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@attributes[ID='maxPeriodSymptomInfection']"/>
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomInRange']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="End Infection" ID="endInfection" sources="//@agents[ID='individual']/@rootActivity/@members[ID='symptomLength']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setOutcomePeriodToEndInfection']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@agents[ID='individual']/@rootActivity/@members[ID='endAsymptomatic']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" value="//@agents[ID='individual']/@rootActivity/@members[ID='symptomLength']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Outcome Period To End Infection" ID="setOutcomePeriodToEndInfection" sources="//@agents[ID='individual']/@rootActivity/@members[ID='endInfection']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='exposure']" attribute="//@agents[ID='individual']/@attributes[ID='outcomePeriod']" parameter="//@agents[ID='individual']/@rootActivity/@members[ID='endInfection']"/>
+      <members xsi:type="act:AQuery" label="Asymptomatic Period Exists" ID="asymptomaticPeriodExists" sources="//@agents[ID='individual']/@rootActivity/@members[ID='progressionPeriod']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='exposureEndsAsymtomatic'] //@agents[ID='individual']/@rootActivity/@members[ID='progression_AsmytomaticEndsAndAsymptomaticPeriodExists_']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@attributes[ID='exposureEndPeriod']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@attributes[ID='asymptomaticEndPeriod']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='different']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="No Asymptomatic Period" ID="noAsymptomaticPeriod" sources="//@agents[ID='individual']/@rootActivity/@members[ID='progressionPeriod']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='exposureEndsNoAsymptomatic']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@attributes[ID='exposureEndPeriod']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@attributes[ID='asymptomaticEndPeriod']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Status To Asymptom Infectious" ID="setStatusToAsymptomInfectious" sources="//@agents[ID='individual']/@rootActivity/@members[ID='exposureEndsNoAsymptomatic']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" attribute="//@agents[ID='individual']/@attributes[ID='status']" parameter="//@agents[ID='individual']/@attributes[ID='status']/@options.3"/>
+      <members xsi:type="act:AAll" label="Exposure Ends No Asymptomatic" ID="exposureEndsNoAsymptomatic" sources="//@agents[ID='individual']/@rootActivity/@members[ID='exposureEnds'] //@agents[ID='individual']/@rootActivity/@members[ID='noAsymptomaticPeriod']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setStatusToAsymptomInfectious']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']"/>
+      <members xsi:type="act:AAll" label="Exposure Ends Asymtomatic" ID="exposureEndsAsymtomatic" sources="//@agents[ID='individual']/@rootActivity/@members[ID='asymptomaticPeriodExists'] //@agents[ID='individual']/@rootActivity/@members[ID='exposureEnds']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setStatusToAsymptomInfectiousCopy']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']"/>
+      <members xsi:type="act:ASet" label="Set Status To Asymptom Infectious Copy" ID="setStatusToAsymptomInfectiousCopy" sources="//@agents[ID='individual']/@rootActivity/@members[ID='exposureEndsAsymtomatic']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" attribute="//@agents[ID='individual']/@attributes[ID='status']" parameter="//@agents[ID='individual']/@attributes[ID='status']/@options.2"/>
+      <members xsi:type="act:AQuery" label="Asmytomatic Ends" ID="asmytomaticEnds" sources="//@agents[ID='individual']/@rootActivity/@members[ID='progressionPeriod']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='progression_AsmytomaticEndsAndAsymptomaticPeriodExists_']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@rootActivity/@members[ID='progressionPeriod']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" value="//@agents[ID='individual']/@attributes[ID='asymptomaticEndPeriod']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Progression (Asmytomatic Ends &amp; Asymptomatic Period Exists)" ID="progression_AsmytomaticEndsAndAsymptomaticPeriodExists_" sources="//@agents[ID='individual']/@rootActivity/@members[ID='asmytomaticEnds'] //@agents[ID='individual']/@rootActivity/@members[ID='asymptomaticPeriodExists']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setStatusToSymptomInfectious']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']"/>
+      <members xsi:type="act:ASet" label="Set Status To Symptom Infectious" ID="setStatusToSymptomInfectious" sources="//@agents[ID='individual']/@rootActivity/@members[ID='progression_AsmytomaticEndsAndAsymptomaticPeriodExists_']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='progression']" attribute="//@agents[ID='individual']/@attributes[ID='status']" parameter="//@agents[ID='individual']/@attributes[ID='status']/@options.3"/>
+      <members xsi:type="act:AQuery" label="Transmission: Status Identical Symptom Infectious Query" ID="transmissionStatusIdenticalSymptomInfectiousQuery" sources="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='transmission_StatusIdenticalSymptomInfectiousQueryOrTransmitStatusIdenticalInfectiousQuery_']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.3"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+      </members>
+      <members xsi:type="act:AAny" label="Transmission (Status Identical Symptom Infectious Query | Transmit: Status Identical Infectious Query)" ID="transmission_StatusIdenticalSymptomInfectiousQueryOrTransmitStatusIdenticalInfectiousQuery_" sources="//@agents[ID='individual']/@rootActivity/@members[ID='transmissionStatusIdenticalSymptomInfectiousQuery'] //@agents[ID='individual']/@rootActivity/@members[ID='transmitStatusIdenticalInfectiousQuery']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='vulnerable']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='transmission']"/>
+      <members xsi:type="act:AQuery" label="Movement: Status Different Dead Query" ID="movementStatusDifferentDeadQuery" sources="//@agents[ID='individual']/@rootActivity/@members[ID='movementMovementDrawLesserMovementProbabilityQuery']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='movement_StatusDifferentDeadQueryAndStatusDifferentSymptomInfectiousQuery_']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.5"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='different']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Movement: Status Different Symptom Infectious Query" ID="movementStatusDifferentSymptomInfectiousQuery" sources="//@agents[ID='individual']/@rootActivity/@members[ID='movementMovementDrawLesserMovementProbabilityQuery']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='movement_StatusDifferentDeadQueryAndStatusDifferentSymptomInfectiousQuery_']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.3"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='different']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Movement: Movement Draw Lesser Movement Probability Query" ID="movementMovementDrawLesserMovementProbabilityQuery" sources="//@agents[ID='individual']/@rootActivity/@members[ID='movementDraw']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='movementStatusDifferentDeadQuery'] //@agents[ID='individual']/@rootActivity/@members[ID='movementStatusDifferentSymptomInfectiousQuery']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']" value="//@agents[ID='individual']/@rootActivity/@members[ID='movementDraw']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']" value="//@attributes[ID='movementProbability']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='lesser']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Movement Draw" ID="movementDraw" sources="//@agents[ID='individual']/@rootActivity/@members[ID='movement']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='movementMovementDrawLesserMovementProbabilityQuery']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']">
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomUnit']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Movement (Status Different Dead Query &amp; Status Different Symptom Infectious Query)" ID="movement_StatusDifferentDeadQueryAndStatusDifferentSymptomInfectiousQuery_" sources="//@agents[ID='individual']/@rootActivity/@members[ID='movementStatusDifferentDeadQuery'] //@agents[ID='individual']/@rootActivity/@members[ID='movementStatusDifferentSymptomInfectiousQuery']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='neighboringLocation']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='movement']"/>
+      <members xsi:type="act:AEvaluate" label="Individual Transmission Rate" ID="individualTransmissionRate" sources="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']" targets="//@agents[ID='individual']/@rootActivity/@members[ID='setContactTransmissionProbabilityToIndividualTransmissionRate']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']">
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']" value="//@attributes[ID='minContactTransmissionProbability']"/>
+        <inputs selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']" value="//@attributes[ID='maxContactTransmissionProbability']"/>
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomInRange']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Contact Transmission Probability To Individual Transmission Rate" ID="setContactTransmissionProbabilityToIndividualTransmissionRate" sources="//@agents[ID='individual']/@rootActivity/@members[ID='individualTransmissionRate']" selected="//@agents[ID='individual']/@rootActivity/@members[ID='initializeState']" attribute="//@agents[ID='individual']/@attributes[ID='contactTransmissionProbability']" parameter="//@agents[ID='individual']/@rootActivity/@members[ID='individualTransmissionRate']"/>
+    </rootActivity>
+    <implementation className="Individual"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Individual Style 2D" ID="individualStyle2D" pluralLabel="Individual Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="Individual Rule" ID="individualRule" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalSusceptibleQuery'] //@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalExposedQuery'] //@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalInfectiousQuery'] //@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalRecoveredQuery'] //@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalDeadQuery'] //@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalSymptomInfectiousQuery']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" agent="//@agents[ID='individual']" space="//@projections[ID='city']" pluralLabel="Individual Rules"/>
+        <members xsi:type="act:AEvaluate" label="Individual Rule: Color Blue()" ID="individualRuleColorBlue" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalSusceptibleQuery']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleShapeOval']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorBlue']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Individual Rule: Shape Oval()" ID="individualRuleShapeOval" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorBlue'] //@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorYellow'] //@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorOrange'] //@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorGreen'] //@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorBlack'] //@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorRed']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleGraphicFill']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeOval']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Individual Rule: Graphic Fill()" ID="individualRuleGraphicFill" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleShapeOval']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Individual Rule: Color Yellow()" ID="individualRuleColorYellow" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalExposedQuery']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleShapeOval']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorYellow']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Individual Rule: Color Orange()" ID="individualRuleColorOrange" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalInfectiousQuery']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleShapeOval']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorOrange']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Individual Rule: Color Green()" ID="individualRuleColorGreen" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalRecoveredQuery']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleShapeOval']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorGreen']"/>
+        </members>
+        <members xsi:type="act:AQuery" label="Individual Rule: Status Identical Susceptible Query" ID="individualRuleStatusIdenticalSusceptibleQuery" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorBlue']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.0"/>
+          <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+        </members>
+        <members xsi:type="act:AQuery" label="Individual Rule: Status Identical Exposed Query" ID="individualRuleStatusIdenticalExposedQuery" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorYellow']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.1"/>
+          <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+        </members>
+        <members xsi:type="act:AQuery" label="Individual Rule: Status Identical Infectious Query" ID="individualRuleStatusIdenticalInfectiousQuery" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorOrange']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.2"/>
+          <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+        </members>
+        <members xsi:type="act:AQuery" label="Individual Rule: Status Identical Recovered Query" ID="individualRuleStatusIdenticalRecoveredQuery" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorGreen']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.4"/>
+          <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+        </members>
+        <members xsi:type="act:AQuery" label="Individual Rule: Status Identical Dead Query" ID="individualRuleStatusIdenticalDeadQuery" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorBlack']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.5"/>
+          <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Individual Rule: Color Black()" ID="individualRuleColorBlack" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalDeadQuery']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleShapeOval']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorBlack']"/>
+        </members>
+        <members xsi:type="act:AQuery" label="Individual Rule: Status Identical Symptom Infectious Query" ID="individualRuleStatusIdenticalSymptomInfectiousQuery" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleColorRed']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']"/>
+          <inputs selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']" value="//@agents[ID='individual']/@attributes[ID='status']/@options.3"/>
+          <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identical']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Individual Rule: Color Red()" ID="individualRuleColorRed" sources="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleStatusIdenticalSymptomInfectiousQuery']" targets="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRuleShapeOval']" selected="//@agents[ID='individual']/@styles[ID='individualStyle2D']/@rootActivity/@members[ID='individualRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorRed']"/>
+        </members>
+      </rootActivity>
+      <implementation className="IndividualStyle2D"/>
+    </styles>
+  </agents>
+  <agents label="Location" ID="location" pluralLabel="Locations">
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups"/>
+    <implementation className="Location"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Location Style 2D" ID="locationStyle2D" pluralLabel="Location Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="Location Rule" ID="locationRule" targets="//@agents[ID='location']/@styles[ID='locationStyle2D']/@rootActivity/@members[ID='locationRuleColorBlack']" selected="//@agents[ID='location']/@styles[ID='locationStyle2D']/@rootActivity/@members[ID='locationRule']" agent="//@agents[ID='location']" space="//@projections[ID='city']" pluralLabel="Location Rules"/>
+        <members xsi:type="act:AEvaluate" label="Location Rule: Color Black()" ID="locationRuleColorBlack" sources="//@agents[ID='location']/@styles[ID='locationStyle2D']/@rootActivity/@members[ID='locationRule']" targets="//@agents[ID='location']/@styles[ID='locationStyle2D']/@rootActivity/@members[ID='locationRuleShapeRectangle']" selected="//@agents[ID='location']/@styles[ID='locationStyle2D']/@rootActivity/@members[ID='locationRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorBlack']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Location Rule: Shape Rectangle()" ID="locationRuleShapeRectangle" sources="//@agents[ID='location']/@styles[ID='locationStyle2D']/@rootActivity/@members[ID='locationRuleColorBlack']" targets="//@agents[ID='location']/@styles[ID='locationStyle2D']/@rootActivity/@members[ID='locationRuleGraphicFill']" selected="//@agents[ID='location']/@styles[ID='locationStyle2D']/@rootActivity/@members[ID='locationRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeRectangle']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Location Rule: Graphic Fill()" ID="locationRuleGraphicFill" sources="//@agents[ID='location']/@styles[ID='locationStyle2D']/@rootActivity/@members[ID='locationRuleShapeRectangle']" selected="//@agents[ID='location']/@styles[ID='locationStyle2D']/@rootActivity/@members[ID='locationRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+      </rootActivity>
+      <implementation className="LocationStyle2D"/>
+    </styles>
+  </agents>
+  <projections xsi:type="metaabm:SGrid" label="City" ID="city" pluralLabel="Citys" dimensionality="2">
+    <attributes xsi:type="metaabm:SAttributeArray" label="Dimensions" ID="dimensions" pluralLabel="Dimensionss" description="The size of each dimension." sType="INTEGER" size="2"/>
+    <attributes label="Width" ID="width" pluralLabel="Widths" description="The horizontal extent of the space." sType="INTEGER" defaultValue="40"/>
+    <attributes label="Height" ID="height" pluralLabel="Heights" description="The vertical extent of the space." sType="INTEGER" defaultValue="100"/>
+  </projections>
+</metaabm:SContext>
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/META-INF/MANIFEST.MF b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/META-INF/MANIFEST.MF
index 14e3eb1..c71242c 100644
--- a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/META-INF/MANIFEST.MF
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/META-INF/MANIFEST.MF
@@ -12,5 +12,7 @@
  org.eclipse.amp.axf.views;bundle-version="0.2.0",

  org.eclipse.amp.escape.ascape;bundle-version="0.2.0",

  org.eclipse.amp.escape.ascape.chart;bundle-version="0.2.0",

- org.ascape.ui.amp;bundle-version="0.2.0"

+ org.ascape.ui.amp;bundle-version="0.2.0",

+ org.eclipse.amp.agf3d;bundle-version="0.2.0",

+ org.eclipse.amp.escape.ascape.agf3d;bundle-version="0.2.0"

 Import-Package: org.apache.commons.lang

diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel1.metaabm b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel1.metaabm
new file mode 100644
index 0000000..8b59b65
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel1.metaabm
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metaabm:SContext xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:act="http://metaabm.org/act" xmlns:function="http://metaabm.org/function" xmlns:metaabm="http://metaabm.org/structure" label="StupidModel1" ID="stupidModel1" pluralLabel="StupidModel1s">
+  <attributes label="Bug Count" ID="bugCount" pluralLabel="Bug Counts" description="The number of bugs to create." sType="INTEGER" defaultValue="100"/>
+  <attributes label="Habitat Count" ID="habitatCount" pluralLabel="Habitat Counts" description="The number of habitats to create." sType="INTEGER"/>
+  <attributes label="Bug Vision" ID="bugVision" pluralLabel="Bug Visions" sType="INTEGER" defaultValue="4"/>
+  <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+    <members xsi:type="act:ABuild" label="Build StupidModel1" ID="buildStupidModel1" targets="//@rootActivity/@members[ID='createBugs'] //@rootActivity/@members[ID='createHabitats'] //@rootActivity/@members[ID='fillGrid']" selected="//@rootActivity/@members[ID='buildStupidModel1']" agent="/" pluralLabel="Build StupidModel1s"/>
+    <members xsi:type="act:ACreateAgents" label="Create Bugs" ID="createBugs" sources="//@rootActivity/@members[ID='buildStupidModel1']" selected="//@rootActivity/@members[ID='buildStupidModel1']" agent="//@agents[ID='bug']" agentCount="//@attributes[ID='bugCount']"/>
+    <members xsi:type="act:ACreateAgents" label="Create Habitats" ID="createHabitats" sources="//@rootActivity/@members[ID='buildStupidModel1']" selected="//@rootActivity/@members[ID='buildStupidModel1']" agent="//@agents[ID='habitat']" agentCount="//@attributes[ID='habitatCount']"/>
+    <members xsi:type="act:ABuildGrid" label="Fill Grid" ID="fillGrid" sources="//@rootActivity/@members[ID='buildStupidModel1']" selected="//@rootActivity/@members[ID='buildStupidModel1']" pluralLabel="Fill Grids" agents="//@agents[ID='bug']" projection="//@projections[ID='grid2D']" fillAgent="//@agents[ID='habitat']"/>
+  </rootActivity>
+  <implementation package="org.metaabm.examples.stupid1" className="StupidModel1" basePath=""/>
+  <agents label="Bug" ID="bug" pluralLabel="Bugs">
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+      <members xsi:type="act:AInitialize" label="Initialize" ID="initialize" targets="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Initializes"/>
+      <members xsi:type="act:ASelect" label="Random Habitat" ID="randomHabitat" sources="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitatAvailableQuery']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']"/>
+      <members xsi:type="act:AQuery" label="Random Habitat: Available() Query" ID="randomHabitatAvailableQuery" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='movetoHabitatinGrid2D']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AMove" label="Move to Habitat in Grid 2D" ID="movetoHabitatinGrid2D" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitatAvailableQuery']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" destination="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']"/>
+      <members xsi:type="act:ARule" label="Bug Rule" ID="bugRule" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='bugRule']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Bug Rules" description="Move to a neighboring space. (In this version we also have to manually notify the bug's broker. :( )"/>
+      <members xsi:type="act:ASelect" label="Nearby Space" ID="nearbySpace" sources="//@agents[ID='bug']/@rootActivity/@members[ID='bugRule']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='habitatAvailable'] //@agents[ID='bug']/@rootActivity/@members[ID='habitatWItin']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='bugRule']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']"/>
+      <members xsi:type="act:AQuery" label="Habitat Available" ID="habitatAvailable" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_HabitatAvailableAndHabitatWItin_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Habitat WItin" ID="habitatWItin" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_HabitatAvailableAndHabitatWItin_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']">
+        <inputs selected="//@agents[ID='bug']/@rootActivity/@members[ID='bugRule']" value="//@attributes[ID='bugVision']"/>
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='within']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Nearby Space (Habitat Available &amp; Habitat WItin)" ID="nearbySpace_HabitatAvailableAndHabitatWItin_" sources="//@agents[ID='bug']/@rootActivity/@members[ID='habitatAvailable'] //@agents[ID='bug']/@rootActivity/@members[ID='habitatWItin']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='movetoBuginGrid2D']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']"/>
+      <members xsi:type="act:AMove" label="Move to Bug in Grid 2D" ID="movetoBuginGrid2D" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_HabitatAvailableAndHabitatWItin_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='bugRule']" destination="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']"/>
+    </rootActivity>
+    <implementation className="Bug"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Bug Style 2D" ID="bugStyle2D" pluralLabel="Bug Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="Bug Rule" ID="bugRule" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRed']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Bug Rules"/>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Color Red()" ID="bugRuleColorRed" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleShapeOval']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorRed']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Shape Oval()" ID="bugRuleShapeOval" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRed']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleGraphicFill']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeOval']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Graphic Fill()" ID="bugRuleGraphicFill" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleShapeOval']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+      </rootActivity>
+      <implementation className="BugStyle2D"/>
+    </styles>
+  </agents>
+  <agents label="Habitat" ID="habitat" pluralLabel="Habitats">
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups"/>
+    <implementation className="Habitat"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Habitat Style 2D" ID="habitatStyle2D" pluralLabel="Habitat Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="Habitat Rule" ID="habitatRule" targets="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleColorGreen']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']" pluralLabel="Habitat Rules"/>
+        <members xsi:type="act:AEvaluate" label="Habitat Rule: Color Green()" ID="habitatRuleColorGreen" sources="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']" targets="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleShapeRectangle']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorGreen']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Habitat Rule: Shape Rectangle()" ID="habitatRuleShapeRectangle" sources="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleColorGreen']" targets="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleGraphicFill']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeRectangle']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Habitat Rule: Graphic Fill()" ID="habitatRuleGraphicFill" sources="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleShapeRectangle']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+      </rootActivity>
+      <implementation className="HabitatStyle2D"/>
+    </styles>
+  </agents>
+  <projections xsi:type="metaabm:SGrid" label="Grid 2D" ID="grid2D" pluralLabel="Grid 2Ds" dimensionality="2" borderRule="PERIODIC" neighborhood="MOORE">
+    <attributes xsi:type="metaabm:SAttributeArray" label="Dimensions" ID="dimensions" pluralLabel="Dimensionss" description="The size of each dimension." sType="INTEGER" size="2"/>
+    <attributes label="Width" ID="width" pluralLabel="Widths" description="The horizontal extent of the space." sType="INTEGER" defaultValue="100"/>
+    <attributes label="Height" ID="height" pluralLabel="Heights" description="The vertical extent of the space." sType="INTEGER" defaultValue="100"/>
+  </projections>
+</metaabm:SContext>
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel2.metaabm b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel2.metaabm
new file mode 100644
index 0000000..493b228
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel2.metaabm
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metaabm:SContext xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:act="http://metaabm.org/act" xmlns:function="http://metaabm.org/function" xmlns:metaabm="http://metaabm.org/structure" label="Stupid Model 2" ID="stupidModel2" pluralLabel="Stupid Model 2s">
+  <attributes label="Bug Count" ID="bugCount" pluralLabel="Bug Counts" description="The number of bugs to create." sType="INTEGER" defaultValue="100"/>
+  <attributes label="Habitat Count" ID="habitatCount" pluralLabel="Habitat Counts" description="The number of habitats to create." sType="INTEGER"/>
+  <attributes label="Max Bug Size Color" ID="maxBugSizeColor" pluralLabel="Max Bug Size Colors"/>
+  <attributes label="Bug Vision" ID="bugVision" pluralLabel="Bug Visions" sType="INTEGER" defaultValue="4"/>
+  <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+    <members xsi:type="act:ABuild" label="Build basicModel" ID="buildbasicModel" targets="//@rootActivity/@members[ID='createBugs'] //@rootActivity/@members[ID='createHabitats'] //@rootActivity/@members[ID='fillGrid']" selected="//@rootActivity/@members[ID='buildbasicModel']" agent="/" pluralLabel="Build basicModels"/>
+    <members xsi:type="act:ACreateAgents" label="Create Bugs" ID="createBugs" sources="//@rootActivity/@members[ID='buildbasicModel']" selected="//@rootActivity/@members[ID='buildbasicModel']" agent="//@agents[ID='bug']" agentCount="//@attributes[ID='bugCount']"/>
+    <members xsi:type="act:ACreateAgents" label="Create Habitats" ID="createHabitats" sources="//@rootActivity/@members[ID='buildbasicModel']" selected="//@rootActivity/@members[ID='buildbasicModel']" agent="//@agents[ID='habitat']" agentCount="//@attributes[ID='habitatCount']"/>
+    <members xsi:type="act:ABuildGrid" label="Fill Grid" ID="fillGrid" sources="//@rootActivity/@members[ID='buildbasicModel']" selected="//@rootActivity/@members[ID='buildbasicModel']" pluralLabel="Fill Grids" agents="//@agents[ID='bug']" projection="//@projections[ID='grid2D']" fillAgent="//@agents[ID='habitat']"/>
+  </rootActivity>
+  <implementation package="org.metaabm.examples.stupid2" className="StupidModel2" basePath=""/>
+  <agents label="Bug" ID="bug" pluralLabel="Bugs">
+    <attributes label="Size" ID="size" pluralLabel="Sizes" sType="INTEGER" defaultValue="0"/>
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+      <members xsi:type="act:AInitialize" label="Initialize" ID="initialize" targets="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Initializes"/>
+      <members xsi:type="act:ASelect" label="RandomHabitat" ID="randomHabitat" sources="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitatAvailableQuery']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']"/>
+      <members xsi:type="act:AQuery" label="RandomHabitat: Available() Query" ID="randomHabitatAvailableQuery" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='movetoRandomHabitat']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AMove" label="Move to Random Habitat" ID="movetoRandomHabitat" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitatAvailableQuery']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" destination="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']"/>
+      <members xsi:type="act:ARule" label="Random Movement" ID="randomMovement" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Random Movements"/>
+      <members xsi:type="act:ASelect" label="Nearby Space" ID="nearbySpace" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='habitatAvailable'] //@agents[ID='bug']/@rootActivity/@members[ID='habitatWithin']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']"/>
+      <members xsi:type="act:AQuery" label="Habitat Available" ID="habitatAvailable" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_HabitatAvailableAndHabitatWithin_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Habitat Within" ID="habitatWithin" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_HabitatAvailableAndHabitatWithin_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']">
+        <inputs selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" value="//@attributes[ID='bugVision']"/>
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='within']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Nearby Space (Habitat Available &amp; Habitat Within)" ID="nearbySpace_HabitatAvailableAndHabitatWithin_" sources="//@agents[ID='bug']/@rootActivity/@members[ID='habitatAvailable'] //@agents[ID='bug']/@rootActivity/@members[ID='habitatWithin']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='movetoHabitatinGrid2DCopy']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']"/>
+      <members xsi:type="act:AMove" label="Move to Habitat in Grid 2D Copy" ID="movetoHabitatinGrid2DCopy" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_HabitatAvailableAndHabitatWithin_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" destination="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']"/>
+      <members xsi:type="act:ARule" label="Grow" ID="grow" targets="//@agents[ID='bug']/@rootActivity/@members[ID='growIncrementSize']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Grows"/>
+      <members xsi:type="act:AEvaluate" label="Grow: Increment Size" ID="growIncrementSize" sources="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='setSizeToGrowIncrementSize']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='grow']">
+        <inputs selected="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" value="//@agents[ID='bug']/@attributes[ID='size']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='increment']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Size To Grow: Increment Size" ID="setSizeToGrowIncrementSize" sources="//@agents[ID='bug']/@rootActivity/@members[ID='growIncrementSize']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" attribute="//@agents[ID='bug']/@attributes[ID='size']" parameter="//@agents[ID='bug']/@rootActivity/@members[ID='growIncrementSize']"/>
+    </rootActivity>
+    <implementation className="Bug"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Bug Style 2D" ID="bugStyle2D" pluralLabel="Bug Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="Bug Rule" ID="bugRule" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Bug Rules"/>
+        <members xsi:type="act:AEvaluate" label="Bug Size Ratio" ID="bugSizeRatio" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@attributes[ID='size']"/>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']/@inputs.1/@literal">
+            <literal label="Literal 10.0" ID="literal10pt0" valueLiteral="10.0"/>
+          </inputs>
+          <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='div']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Size Unit" ID="bugSizeUnit" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']"/>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']/@inputs.1/@literal">
+            <literal label="Literal 1.0" ID="literal1pt0" valueLiteral="1.0"/>
+          </inputs>
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='math']/@functions[ID='min']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Color RGB(Bug Rule: Minimum(Bug Size Ratio, Literal 1.0), Literal 1.0, Literal 1.0)" ID="bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleShapeOval']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_']/@inputs.0/@literal">
+            <literal label="Literal 1.0" ID="literal1pt0" valueLiteral="1.0"/>
+          </inputs>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']"/>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']"/>
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorRGB']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Shape Oval()" ID="bugRuleShapeOval" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleGraphicFill']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeOval']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Graphic Fill()" ID="bugRuleGraphicFill" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleShapeOval']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Invert Bug Size" ID="invertBugSize" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+            <value xsi:type="metaabm:SAttribute" href="http://metaabm.org/core_library.metaabm#//@attributes[ID='unit']"/>
+          </inputs>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']"/>
+          <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='sub']"/>
+        </members>
+      </rootActivity>
+      <implementation className="BugStyle2D"/>
+    </styles>
+  </agents>
+  <agents label="Habitat" ID="habitat" pluralLabel="Habitats">
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups"/>
+    <implementation className="Habitat"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Habitat Style 2D" ID="habitatStyle2D" pluralLabel="Habitat Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups"/>
+      <implementation className="HabitatStyle2D"/>
+    </styles>
+  </agents>
+  <projections xsi:type="metaabm:SGrid" label="Grid 2D" ID="grid2D" pluralLabel="Grid 2Ds" dimensionality="2" borderRule="PERIODIC" neighborhood="MOORE">
+    <attributes xsi:type="metaabm:SAttributeArray" label="Dimensions" ID="dimensions" pluralLabel="Dimensionss" description="The size of each dimension." sType="INTEGER" size="2"/>
+    <attributes label="Width" ID="width" pluralLabel="Widths" description="The horizontal extent of the space." sType="INTEGER" defaultValue="100"/>
+    <attributes label="Height" ID="height" pluralLabel="Heights" description="The vertical extent of the space." sType="INTEGER" defaultValue="100"/>
+  </projections>
+</metaabm:SContext>
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel3.metaabm b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel3.metaabm
new file mode 100644
index 0000000..7dc4fbb
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel3.metaabm
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metaabm:SContext xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:act="http://metaabm.org/act" xmlns:function="http://metaabm.org/function" xmlns:metaabm="http://metaabm.org/structure" label="Stupid Model 3" ID="stupidModel3" pluralLabel="Stupid Model 3s">
+  <attributes label="Bug Count" ID="bugCount" pluralLabel="Bug Counts" description="The number of bugs to create." sType="INTEGER" defaultValue="100"/>
+  <attributes label="Habitat Count" ID="habitatCount" pluralLabel="Habitat Counts" description="The number of habitats to create." sType="INTEGER"/>
+  <attributes label="Bug Vision" ID="bugVision" pluralLabel="Bug Visions" sType="INTEGER" defaultValue="4"/>
+  <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+    <members xsi:type="act:ABuild" label="Build stupidModel3" ID="buildstupidModel3" targets="//@rootActivity/@members[ID='createBugs'] //@rootActivity/@members[ID='createHabitats'] //@rootActivity/@members[ID='fillGrid']" selected="//@rootActivity/@members[ID='buildstupidModel3']" agent="/" pluralLabel="Build stupidModel3s"/>
+    <members xsi:type="act:ACreateAgents" label="Create Bugs" ID="createBugs" sources="//@rootActivity/@members[ID='buildstupidModel3']" selected="//@rootActivity/@members[ID='buildstupidModel3']" agent="//@agents[ID='bug']" agentCount="//@attributes[ID='bugCount']"/>
+    <members xsi:type="act:ACreateAgents" label="Create Habitats" ID="createHabitats" sources="//@rootActivity/@members[ID='buildstupidModel3']" selected="//@rootActivity/@members[ID='buildstupidModel3']" agent="//@agents[ID='habitat']" agentCount="//@attributes[ID='habitatCount']"/>
+    <members xsi:type="act:ABuildGrid" label="Fill Grid" ID="fillGrid" sources="//@rootActivity/@members[ID='buildstupidModel3']" selected="//@rootActivity/@members[ID='buildstupidModel3']" pluralLabel="Fill Grids" agents="//@agents[ID='bug']" projection="//@projections[ID='grid2D']" fillAgent="//@agents[ID='habitat']"/>
+  </rootActivity>
+  <implementation package="org.metaabm.examples.stupid3" className="StupidModel3" basePath=""/>
+  <agents label="Bug" ID="bug" pluralLabel="Bugs">
+    <attributes label="Size" ID="size" pluralLabel="Sizes" sType="INTEGER" defaultValue="0"/>
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+      <members xsi:type="act:AInitialize" label="Initialize" ID="initialize" targets="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Initializes"/>
+      <members xsi:type="act:ASelect" label="RandomHabitat" ID="randomHabitat" sources="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitatAvailableQuery']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']"/>
+      <members xsi:type="act:AQuery" label="RandomHabitat: Available() Query" ID="randomHabitatAvailableQuery" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='movetoHabitatinGrid2D']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AMove" label="Move to Habitat in Grid 2D" ID="movetoHabitatinGrid2D" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitatAvailableQuery']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" destination="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']"/>
+      <members xsi:type="act:ARule" label="Random Movement" ID="randomMovement" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Random Movements"/>
+      <members xsi:type="act:ASelect" label="NearbySpace" ID="nearbySpace" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpaceAvailableQuery'] //@agents[ID='bug']/@rootActivity/@members[ID='nearbySpaceWithin_BugVision_Query']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']"/>
+      <members xsi:type="act:AQuery" label="NearbySpace: Available() Query" ID="nearbySpaceAvailableQuery" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_AvailableQueryAndWithin_BugVision_Query_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="NearbySpace: Within(Bug Vision) Query" ID="nearbySpaceWithin_BugVision_Query" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_AvailableQueryAndWithin_BugVision_Query_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']">
+        <inputs selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" value="//@attributes[ID='bugVision']"/>
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='within']"/>
+      </members>
+      <members xsi:type="act:AAll" label="NearbySpace (Available() Query &amp; Within(Bug Vision) Query)" ID="nearbySpace_AvailableQueryAndWithin_BugVision_Query_" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpaceAvailableQuery'] //@agents[ID='bug']/@rootActivity/@members[ID='nearbySpaceWithin_BugVision_Query']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='movetoHabitatinGrid2DCopy']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']"/>
+      <members xsi:type="act:AMove" label="Move to Habitat in Grid 2D Copy" ID="movetoHabitatinGrid2DCopy" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_AvailableQueryAndWithin_BugVision_Query_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" destination="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']"/>
+      <members xsi:type="act:ARule" label="Grow" ID="grow" targets="//@agents[ID='bug']/@rootActivity/@members[ID='growIncrementSize']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Grows"/>
+      <members xsi:type="act:AEvaluate" label="Grow: Increment Size" ID="growIncrementSize" sources="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='setSizeToGrowIncrementSize']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='grow']">
+        <inputs selected="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" value="//@agents[ID='bug']/@attributes[ID='size']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='increment']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Size To Grow: Increment Size" ID="setSizeToGrowIncrementSize" sources="//@agents[ID='bug']/@rootActivity/@members[ID='growIncrementSize']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" attribute="//@agents[ID='bug']/@attributes[ID='size']" parameter="//@agents[ID='bug']/@rootActivity/@members[ID='growIncrementSize']"/>
+    </rootActivity>
+    <implementation className="Bug"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Bug Style 2D" ID="bugStyle2D" pluralLabel="Bug Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="Bug Rule" ID="bugRule" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Bug Rules"/>
+        <members xsi:type="act:AEvaluate" label="Bug Size Ratio" ID="bugSizeRatio" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@attributes[ID='size']"/>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']/@inputs.1/@literal">
+            <literal label="Literal 10.0" ID="literal10pt0" valueLiteral="10.0"/>
+          </inputs>
+          <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='div']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Size Unit" ID="bugSizeUnit" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']"/>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']/@inputs.1/@literal">
+            <literal label="Literal 1.0" ID="literal1pt0" valueLiteral="1.0"/>
+          </inputs>
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='math']/@functions[ID='min']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Color RGB(Bug Rule: Minimum(Bug Size Ratio, Literal 1.0), Literal 1.0, Literal 1.0)" ID="bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleShapeOval']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_']/@inputs.0/@literal">
+            <literal label="Literal 1.0" ID="literal1pt0" valueLiteral="1.0"/>
+          </inputs>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']"/>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']"/>
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorRGB']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Shape Oval()" ID="bugRuleShapeOval" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleGraphicFill']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeOval']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Graphic Fill()" ID="bugRuleGraphicFill" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleShapeOval']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Invert Bug Size" ID="invertBugSize" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+            <value xsi:type="metaabm:SAttribute" href="http://metaabm.org/core_library.metaabm#//@attributes[ID='unit']"/>
+          </inputs>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']"/>
+          <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='sub']"/>
+        </members>
+      </rootActivity>
+      <implementation className="BugStyle2D"/>
+    </styles>
+  </agents>
+  <agents label="Habitat" ID="habitat" pluralLabel="Habitats">
+    <attributes label="FoodAvailability" ID="foodAvailability" pluralLabel="FoodAvailabilitys" sType="REAL" defaultValue="0.0"/>
+    <attributes label="MaximumFoodProductionRate" ID="maximumFoodProductionRate" pluralLabel="MaximumFoodProductionRates" sType="REAL" defaultValue="0.01"/>
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+      <members xsi:type="act:ARule" label="determindFoodProduction" ID="determindFoodProduction" targets="//@agents[ID='habitat']/@rootActivity/@members[ID='calculateFoodProductionRate']" selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']" pluralLabel="determindFoodProductions"/>
+      <members xsi:type="act:AEvaluate" label="CalculateFoodProductionRate" ID="calculateFoodProductionRate" sources="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" targets="//@agents[ID='habitat']/@rootActivity/@members[ID='newFoodProductionValue']" selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']">
+        <inputs selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" value="//@agents[ID='habitat']/@rootActivity/@members[ID='calculateFoodProductionRate']/@inputs.0/@literal">
+          <literal label="MinimumProduction" ID="minimumProduction" valueLiteral="0"/>
+        </inputs>
+        <inputs selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" value="//@agents[ID='habitat']/@attributes[ID='maximumFoodProductionRate']"/>
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomInRange']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="NewFoodProductionValue" ID="newFoodProductionValue" sources="//@agents[ID='habitat']/@rootActivity/@members[ID='calculateFoodProductionRate']" targets="//@agents[ID='habitat']/@rootActivity/@members[ID='setFoodAvailablity']" selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']">
+        <inputs selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" value="//@agents[ID='habitat']/@attributes[ID='foodAvailability']"/>
+        <inputs selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" value="//@agents[ID='habitat']/@rootActivity/@members[ID='calculateFoodProductionRate']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="SetFoodAvailablity" ID="setFoodAvailablity" sources="//@agents[ID='habitat']/@rootActivity/@members[ID='newFoodProductionValue']" selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" attribute="//@agents[ID='habitat']/@attributes[ID='foodAvailability']" parameter="//@agents[ID='habitat']/@rootActivity/@members[ID='newFoodProductionValue']"/>
+    </rootActivity>
+    <implementation className="Habitat"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Habitat Style 2D" ID="habitatStyle2D" pluralLabel="Habitat Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="Habitat Rule" ID="habitatRule" targets="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleColorBlack']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']" pluralLabel="Habitat Rules"/>
+        <members xsi:type="act:AEvaluate" label="Habitat Rule: Color Black()" ID="habitatRuleColorBlack" sources="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']" targets="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleShapeRectangle']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorBlack']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Habitat Rule: Shape Rectangle()" ID="habitatRuleShapeRectangle" sources="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleColorBlack']" targets="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleGraphicFill']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeRectangle']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Habitat Rule: Graphic Fill()" ID="habitatRuleGraphicFill" sources="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleShapeRectangle']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+      </rootActivity>
+      <implementation className="HabitatStyle2D"/>
+    </styles>
+  </agents>
+  <projections xsi:type="metaabm:SGrid" label="Grid 2D" ID="grid2D" pluralLabel="Grid 2Ds" dimensionality="2" borderRule="PERIODIC" neighborhood="MOORE">
+    <attributes xsi:type="metaabm:SAttributeArray" label="Dimensions" ID="dimensions" pluralLabel="Dimensionss" description="The size of each dimension." sType="INTEGER" size="2"/>
+    <attributes label="Width" ID="width" pluralLabel="Widths" description="The horizontal extent of the space." sType="INTEGER" defaultValue="100"/>
+    <attributes label="Height" ID="height" pluralLabel="Heights" description="The vertical extent of the space." sType="INTEGER" defaultValue="100"/>
+  </projections>
+</metaabm:SContext>
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel5.metaabm b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel5.metaabm
new file mode 100644
index 0000000..800d44f
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/StupidModel5.metaabm
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metaabm:SContext xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:act="http://metaabm.org/act" xmlns:function="http://metaabm.org/function" xmlns:metaabm="http://metaabm.org/structure" label="Stupid Model 5" ID="stupidModel5" pluralLabel="Stupid Model 5s">
+  <attributes label="Bug Count" ID="bugCount" pluralLabel="Bug Counts" description="The number of bugs to create." sType="INTEGER" defaultValue="100"/>
+  <attributes label="Habitat Count" ID="habitatCount" pluralLabel="Habitat Counts" description="The number of habitats to create." sType="INTEGER"/>
+  <attributes label="Bug Vision" ID="bugVision" pluralLabel="Bug Visions" sType="INTEGER" defaultValue="4"/>
+  <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+    <members xsi:type="act:ABuild" label="Build stupidModel3" ID="buildstupidModel3" targets="//@rootActivity/@members[ID='createBugs'] //@rootActivity/@members[ID='createHabitats'] //@rootActivity/@members[ID='fillGrid']" selected="//@rootActivity/@members[ID='buildstupidModel3']" agent="/" pluralLabel="Build stupidModel3s"/>
+    <members xsi:type="act:ACreateAgents" label="Create Bugs" ID="createBugs" sources="//@rootActivity/@members[ID='buildstupidModel3']" selected="//@rootActivity/@members[ID='buildstupidModel3']" agent="//@agents[ID='bug']" agentCount="//@attributes[ID='bugCount']"/>
+    <members xsi:type="act:ACreateAgents" label="Create Habitats" ID="createHabitats" sources="//@rootActivity/@members[ID='buildstupidModel3']" selected="//@rootActivity/@members[ID='buildstupidModel3']" agent="//@agents[ID='habitat']" agentCount="//@attributes[ID='habitatCount']"/>
+    <members xsi:type="act:ABuildGrid" label="Fill Grid" ID="fillGrid" sources="//@rootActivity/@members[ID='buildstupidModel3']" selected="//@rootActivity/@members[ID='buildstupidModel3']" pluralLabel="Fill Grids" agents="//@agents[ID='bug']" projection="//@projections[ID='grid2D']" fillAgent="//@agents[ID='habitat']"/>
+  </rootActivity>
+  <implementation package="org.metaabm.examples.stupid5" className="StupidModel5" basePath=""/>
+  <agents label="Bug" ID="bug" pluralLabel="Bugs">
+    <attributes label="Size" ID="size" pluralLabel="Sizes" sType="REAL" defaultValue="0.0"/>
+    <attributes label="Consumption" ID="consumption" pluralLabel="Consumptions" sType="REAL" defaultValue="0.0"/>
+    <attributes label="Max Consumption" ID="maxConsumption" pluralLabel="Max Consumptions" sType="REAL" defaultValue="0.2"/>
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+      <members xsi:type="act:AInitialize" label="Initialize" ID="initialize" targets="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Initializes"/>
+      <members xsi:type="act:ASelect" label="RandomHabitat" ID="randomHabitat" sources="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitatAvailableQuery']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']"/>
+      <members xsi:type="act:AQuery" label="RandomHabitat: Available() Query" ID="randomHabitatAvailableQuery" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='movetoHabitatinGrid2D']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AMove" label="Move to Habitat in Grid 2D" ID="movetoHabitatinGrid2D" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitatAvailableQuery']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='initialize']" destination="//@agents[ID='bug']/@rootActivity/@members[ID='randomHabitat']"/>
+      <members xsi:type="act:ARule" label="Random Movement" ID="randomMovement" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Random Movements"/>
+      <members xsi:type="act:ASelect" label="Nearby Space" ID="nearbySpace" sources="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpaceAvailableQuery'] //@agents[ID='bug']/@rootActivity/@members[ID='nearbySpaceWithin_BugVision_Query']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']"/>
+      <members xsi:type="act:AQuery" label="Nearby Space: Available() Query" ID="nearbySpaceAvailableQuery" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_AvailableQueryAndWithin_BugVision_Query_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Nearby Space: Within(Bug Vision) Query" ID="nearbySpaceWithin_BugVision_Query" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_AvailableQueryAndWithin_BugVision_Query_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']">
+        <inputs selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" value="//@attributes[ID='bugVision']"/>
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='within']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Nearby Space (Available() Query &amp; Within(Bug Vision) Query)" ID="nearbySpace_AvailableQueryAndWithin_BugVision_Query_" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpaceAvailableQuery'] //@agents[ID='bug']/@rootActivity/@members[ID='nearbySpaceWithin_BugVision_Query']" targets="//@agents[ID='bug']/@rootActivity/@members[ID='movetoHabitatinGrid2DCopy']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']"/>
+      <members xsi:type="act:AMove" label="Move to Habitat in Grid 2D Copy" ID="movetoHabitatinGrid2DCopy" sources="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace_AvailableQueryAndWithin_BugVision_Query_']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='randomMovement']" destination="//@agents[ID='bug']/@rootActivity/@members[ID='nearbySpace']"/>
+      <members xsi:type="act:ARule" label="Grow" ID="grow" targets="//@agents[ID='bug']/@rootActivity/@members[ID='consumeFood']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Grows"/>
+      <members xsi:type="act:AMethod" label="ConsumeFood" ID="consumeFood" sources="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" selected="//@agents[ID='bug']/@rootActivity/@members[ID='grow']" pluralLabel="ConsumeFoods" body="    &#x9;Habitat habitat = (Habitat) getHostCell();&#xD;&#xA;    &#x9;double availability = habitat.getFoodAvailability();&#xD;&#xA;    &#x9;double consumption = availability &lt;  getMaxConsumption() ? availability : getMaxConsumption();&#xD;&#xA;    &#x9;setSize(getSize()+consumption);&#xD;&#xA;      habitat.setFoodAvailability(availability-consumption);&#xD;&#xA;"/>
+    </rootActivity>
+    <implementation className="Bug"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Bug Style 2D" ID="bugStyle2D" pluralLabel="Bug Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="Bug Rule" ID="bugRule" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" agent="//@agents[ID='bug']" space="//@projections[ID='grid2D']" pluralLabel="Bug Rules"/>
+        <members xsi:type="act:AEvaluate" label="Bug Size Ratio" ID="bugSizeRatio" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@attributes[ID='size']"/>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']/@inputs.1/@literal">
+            <literal label="Literal 10.0" ID="literal10pt0" valueLiteral="10.0"/>
+          </inputs>
+          <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='div']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Size Unit" ID="bugSizeUnit" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeRatio']"/>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']/@inputs.1/@literal">
+            <literal label="Literal 1.0" ID="literal1pt0" valueLiteral="1.0"/>
+          </inputs>
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='math']/@functions[ID='min']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Color RGB(Bug Rule: Minimum(Bug Size Ratio, Literal 1.0), Literal 1.0, Literal 1.0)" ID="bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleShapeOval']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_']/@inputs.0/@literal">
+            <literal label="Literal 1.0" ID="literal1pt0" valueLiteral="1.0"/>
+          </inputs>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']"/>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='invertBugSize']"/>
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorRGB']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Shape Oval()" ID="bugRuleShapeOval" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleGraphicFill']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeOval']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Bug Rule: Graphic Fill()" ID="bugRuleGraphicFill" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleShapeOval']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Invert Bug Size" ID="invertBugSize" sources="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']" targets="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_']" selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']">
+            <value xsi:type="metaabm:SAttribute" href="http://metaabm.org/core_library.metaabm#//@attributes[ID='unit']"/>
+          </inputs>
+          <inputs selected="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugRule']" value="//@agents[ID='bug']/@styles[ID='bugStyle2D']/@rootActivity/@members[ID='bugSizeUnit']"/>
+          <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='sub']"/>
+        </members>
+      </rootActivity>
+      <implementation className="BugStyle2D"/>
+    </styles>
+  </agents>
+  <agents label="Habitat" ID="habitat" pluralLabel="Habitats">
+    <attributes label="FoodAvailability" ID="foodAvailability" pluralLabel="FoodAvailabilitys" sType="REAL" defaultValue="0.0"/>
+    <attributes label="MaximumFoodProductionRate" ID="maximumFoodProductionRate" pluralLabel="MaximumFoodProductionRates" sType="REAL" defaultValue="0.5"/>
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+      <members xsi:type="act:ARule" label="determindFoodProduction" ID="determindFoodProduction" targets="//@agents[ID='habitat']/@rootActivity/@members[ID='calculateFoodProductionRate']" selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']" pluralLabel="determindFoodProductions"/>
+      <members xsi:type="act:AEvaluate" label="CalculateFoodProductionRate" ID="calculateFoodProductionRate" sources="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" targets="//@agents[ID='habitat']/@rootActivity/@members[ID='newFoodProductionValue']" selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']">
+        <inputs selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" value="//@agents[ID='habitat']/@rootActivity/@members[ID='calculateFoodProductionRate']/@inputs.0/@literal">
+          <literal label="MinimumProduction" ID="minimumProduction" valueLiteral="0"/>
+        </inputs>
+        <inputs selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" value="//@agents[ID='habitat']/@attributes[ID='maximumFoodProductionRate']"/>
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomInRange']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="NewFoodProductionValue" ID="newFoodProductionValue" sources="//@agents[ID='habitat']/@rootActivity/@members[ID='calculateFoodProductionRate']" targets="//@agents[ID='habitat']/@rootActivity/@members[ID='setFoodAvailablity']" selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']">
+        <inputs selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" value="//@agents[ID='habitat']/@attributes[ID='foodAvailability']"/>
+        <inputs selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" value="//@agents[ID='habitat']/@rootActivity/@members[ID='calculateFoodProductionRate']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="SetFoodAvailablity" ID="setFoodAvailablity" sources="//@agents[ID='habitat']/@rootActivity/@members[ID='newFoodProductionValue']" selected="//@agents[ID='habitat']/@rootActivity/@members[ID='determindFoodProduction']" attribute="//@agents[ID='habitat']/@attributes[ID='foodAvailability']" parameter="//@agents[ID='habitat']/@rootActivity/@members[ID='newFoodProductionValue']"/>
+    </rootActivity>
+    <implementation className="Habitat"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Habitat Style 2D" ID="habitatStyle2D" pluralLabel="Habitat Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="Habitat Rule" ID="habitatRule" targets="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleColorBlack']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']" agent="//@agents[ID='habitat']" space="//@projections[ID='grid2D']" pluralLabel="Habitat Rules"/>
+        <members xsi:type="act:AEvaluate" label="Habitat Rule: Color Black()" ID="habitatRuleColorBlack" sources="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']" targets="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleShapeRectangle']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorBlack']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Habitat Rule: Shape Rectangle()" ID="habitatRuleShapeRectangle" sources="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleColorBlack']" targets="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleGraphicFill']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeRectangle']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Habitat Rule: Graphic Fill()" ID="habitatRuleGraphicFill" sources="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRuleShapeRectangle']" selected="//@agents[ID='habitat']/@styles[ID='habitatStyle2D']/@rootActivity/@members[ID='habitatRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+      </rootActivity>
+      <implementation className="HabitatStyle2D"/>
+    </styles>
+  </agents>
+  <projections xsi:type="metaabm:SGrid" label="Grid 2D" ID="grid2D" pluralLabel="Grid 2Ds" dimensionality="2" borderRule="PERIODIC" neighborhood="MOORE">
+    <attributes xsi:type="metaabm:SAttributeArray" label="Dimensions" ID="dimensions" pluralLabel="Dimensionss" description="The size of each dimension." sType="INTEGER" size="2"/>
+    <attributes label="Width" ID="width" pluralLabel="Widths" description="The horizontal extent of the space." sType="INTEGER" defaultValue="100"/>
+    <attributes label="Height" ID="height" pluralLabel="Heights" description="The vertical extent of the space." sType="INTEGER" defaultValue="100"/>
+  </projections>
+</metaabm:SContext>
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/DemographicPrisonersDilemma.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/DemographicPrisonersDilemma.html
new file mode 100644
index 0000000..8d68be2
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/DemographicPrisonersDilemma.html
@@ -0,0 +1,280 @@
+		<HTML>

+			<HEAD>

+				<TITLE>Demographic Prisoner_s Dilemma</TITLE>

+				<STYLE TYPE="text/css">

+					body,

+					html {

+    					margin:0;

+    					padding:0;

+    					

+    					color:#000;

+    				}

+    				body {

+    					min-width:750px;

+    				}

+					#wrap {

+    					

+    					margin:0 auto;

+    					width:1024px;

+    				}

+    				#header {

+    					border-bottom: solid 1px #BEBFAA;   						

+    					left: 220px;

+    				}

+					#nav {

+    					

+    				}

+					#nav ul{

+   						margin:0;

+    					padding:0;

+    					list-style:none;

+    				}

+					#nav li{

+    					display:inline;

+    					margin:0;

+    					padding:0;

+    				}

+    				#main {

+    					border-left: solid 1px #BEBFAA;   						

+    					

+    					float:left;

+    					width:800px;

+    				}

+					#sidebarfake {

+      					float:left;

+    					width:200px;

+    				}

+					#sidebar {

+  						position: fixed;

+      					float:left;

+    					width:200px;

+    				}

+					#footer {

+    					border-top: solid 1px #BEBFAA;   						

+    					

+    					clear:both;

+    				}

+    				

+					#section {

+  						background: #FFFFDC;

+   						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+					#section h1 {

+   						text-align: left;

+   						font-family: sans-serif;

+					}

+					#section p {

+   						text-indent: 2em;

+					}

+					#section p.noindent {

+   						text-indent: 0;

+					}

+					

+					#agent {

+  						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+

+					#agents {

+						border-bottom: solid 1px black;

+						border-left: solid 1px #BEBFAA;

+						border-right: solid 1px black;

+						border-top: solid 1px #BEBFAA;

+						margin: 2em 1em 1em 2em;

+						padding: 0.5em 2em 2em 2em;

+						text-align: justify;

+					}

+				</STYLE>

+			</HEAD>

+			<BODY>

+			<div id="wrap">

+    			<div id="header">

+    				<H1>Demographic Prisoner_s Dilemma</H1>

+					<P></P>

+    			</div>

+    			<div id="sidebarfake">

+    				<H1>   </H1>

+    			</div>

+    			<div id="sidebar">

+			    <ul>

+    					<li><a href="#parlink">Parameters</a></li>

+    					<li><a href="#behaviorlink">Behaviors</a></li>

+    					<li><a href="#agentslink">Agents</a>

+    					<ul>

+    					<li><a href="#playerlink">Player</a></li>

+    					<li><a href="#playCelllink">Play Cell</a></li>

+    					</ul></li>

+    					<li><a href="#projlink">Projections</a></li>

+    				</ul>    				

+    			</div>

+    			<div id="main">

+    					<div id="agent">

+    					<h3><a name="parlink">Parameters</a></h3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Player Count</td>

+						<td>Integer</td>

+						<td>100</td></tr>

+					<tr><td colspan="3"><i>The number of players to create.</i></td></tr></tbody>

+					<tbody ><tr><td>Minimum Wealth</td>

+						<td>Integer</td>

+						<td>20</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Maximum Wealth</td>

+						<td>Integer</td>

+						<td>100</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Maximum Age</td>

+						<td>Integer</td>

+						<td>100</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Payoff Cooperate Cooperate</td>

+						<td>Integer</td>

+						<td>2</td></tr>

+					<tr><td colspan="3"><i>The change in wealth for a player when playing cooperate against cooperate.</i></td></tr></tbody>

+					<tbody ><tr><td>Payoff Cooperate Defect</td>

+						<td>Integer</td>

+						<td>-6</td></tr>

+					<tr><td colspan="3"><i>The change in wealth for a player when playing cooperate against defect.</i></td></tr></tbody>

+					<tbody ><tr><td>Payoff Defect Cooperate</td>

+						<td>Integer</td>

+						<td>6</td></tr>

+					<tr><td colspan="3"><i>The change in wealth for a player when playing defect against cooperate.</i></td></tr></tbody>

+					<tbody ><tr><td>Payoff Defect Defect</td>

+						<td>Integer</td>

+						<td>-5</td></tr>

+					<tr><td colspan="3"><i>The change in wealth for a player when both players defect.</i></td></tr></tbody>

+					<tbody ><tr><td>Fission Wealth</td>

+						<td>Integer</td>

+						<td>11</td></tr>

+					<tr><td colspan="3"><i>The wealth level at which an agent can fission.</i></td></tr></tbody>

+					<tbody ><tr><td>Inheirited Wealth</td>

+						<td>Integer</td>

+						<td>6</td></tr>

+					<tr><td colspan="3"><i>The wealth that is passed from parent to child.</i></td></tr></tbody>

+					<tbody ><tr><td>Initial Wealth</td>

+						<td>Integer</td>

+						<td>6</td></tr>

+					<tr><td colspan="3"><i>The wealth initially assigned to an agent at the beginning of model run.</i></td></tr></tbody>

+					<tbody ><tr><td>Mutation Rate</td>

+						<td>Real</td>

+						<td>.1</td></tr>

+					<tr><td colspan="3"><i>The probabaility that a given agent will change strategies in a given period, expressed as a value from 0.0 to 1.0.</i></td></tr></tbody>

+					<tbody ><tr><td>Death Age</td>

+						<td>Integer</td>

+						<td>100</td></tr>

+					<tr><td colspan="3"><i>The number of periods before an agent will be removed from game when Die At Age rule is active.</i></td></tr></tbody>

+					<tbody ><tr><td>Birth Age</td>

+						<td>Integer</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i>The actual age in years as determined by data set.</i></td></tr></tbody>

+		</table>

+    					<h3><a name="behaviorlink">Behaviors</a></h3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Build Demographic Prisonner's Dillema</i></td>

+						<td>Build internal state for Demographic Prisoner_s Dilemma.</td>

+					</tr>

+		</table>

+						</div>

+    					<div id="agents">

+    					<h1><a name="agentslink">Agents</a></h1>

+								<div id="agent">

+									<H2><a name="playerlink"/>Player</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Cooperate</td>

+						<td>Boolean</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Age</td>

+						<td>Integer</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Wealth</td>

+						<td>Integer</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Initialize</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Move To Random Location</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Random Walk</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Play Neighbor</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Update Age</i></td>

+						<td>Increment the Age by One.</td>

+					</tr>

+					<tr>

+						<td><i>Fission Rule</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Die At Age</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Die At Wealth 0</i></td>

+						<td></td>

+					</tr>

+		</table>

+								</div>

+								<div id="agent">

+									<H2><a name="playCelllink"/>Play Cell</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+		</table>

+								</div>

+						</div>

+					<div id="section">

+						<H2><a name="projlink"/>Projections:</a></H2>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Name</th><th>Description</th><th>Type</th></tr></thead>

+					<tr>

+						<td><i>Game Space</i></td>

+						<td></td>

+						<td>2-Dimensional Grid</td>

+					</tr>

+		</table>

+					</div>			    			

+    			</div>

+			    

+    			<div id="footer">

+    				<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+    			</div>

+			</div>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/DemographicPrisonersDilemmaSimple.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/DemographicPrisonersDilemmaSimple.html
new file mode 100644
index 0000000..70c2e38
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/DemographicPrisonersDilemmaSimple.html
@@ -0,0 +1,124 @@
+

+		<HTML>

+			<HEAD>

+				<TITLE>Demographic Prisoner_s Dilemma</TITLE>

+			</HEAD>

+			<BODY>

+				<H1>Demographic Prisoner_s Dilemma</H1>

+				<P></P>

+					<h2>Parameters</h2>

+						

+		

+				<H5>Player Count  (int, default: 100)</H5>

+				<i>The number of players to create.</i><BR/>

+		

+				<H5>Minimum Wealth  (int, default: 20)</H5>

+				<i></i><BR/>

+		

+				<H5>Maximum Wealth  (int, default: 100)</H5>

+				<i></i><BR/>

+		

+				<H5>Maximum Age  (int, default: 100)</H5>

+				<i></i><BR/>

+		

+				<H5>Payoff Cooperate Cooperate  (int, default: 2)</H5>

+				<i>The change in wealth for a player when playing cooperate against cooperate.</i><BR/>

+		

+				<H5>Payoff Cooperate Defect  (int, default: -6)</H5>

+				<i>The change in wealth for a player when playing cooperate against defect.</i><BR/>

+		

+				<H5>Payoff Defect Cooperate  (int, default: 6)</H5>

+				<i>The change in wealth for a player when playing defect against cooperate.</i><BR/>

+		

+				<H5>Payoff Defect Defect  (int, default: -5)</H5>

+				<i>The change in wealth for a player when both players defect.</i><BR/>

+		

+				<H5>Fission Wealth  (int, default: 11)</H5>

+				<i>The wealth level at which an agent can fission.</i><BR/>

+		

+				<H5>Inheirited Wealth  (int, default: 6)</H5>

+				<i>The wealth that is passed from parent to child.</i><BR/>

+		

+				<H5>Initial Wealth  (int, default: 6)</H5>

+				<i>The wealth initially assigned to an agent at the beginning of model run.</i><BR/>

+		

+				<H5>Mutation Rate  (double, default: .1)</H5>

+				<i>The probabaility that a given agent will change strategies in a given period, expressed as a value from 0.0 to 1.0.</i><BR/>

+		

+				<H5>Death Age  (int, default: 100)</H5>

+				<i>The number of periods before an agent will be removed from game when Die At Age rule is active.</i><BR/>

+		

+				<H5>Birth Age  (int, default: )</H5>

+				<i>The actual age in years as determined by data set.</i><BR/>

+		

+

+					<h2><ul>Agents</ul></h2>

+						

+							<H3>Player</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+				<H5>Cooperate  (boolean, default: )</H5>

+				<i></i><BR/>

+		

+				<H5>Age  (int, default: )</H5>

+				<i></i><BR/>

+		

+				<H5>Wealth  (int, default: )</H5>

+				<i></i><BR/>

+		

+

+							<H4>Behaviors</H4>

+							

+		

+				<H5>Initialize</H5>

+				<i></i><BR/>

+		

+				<H5>Move To Random Location</H5>

+				<i></i><BR/>

+		

+				<H5>Random Walk</H5>

+				<i></i><BR/>

+		

+				<H5>Play Neighbor</H5>

+				<i></i><BR/>

+		

+				<H5>Update Age</H5>

+				<i>Increment the Age by One.</i><BR/>

+		

+				<H5>Fission Rule</H5>

+				<i></i><BR/>

+		

+				<H5>Die At Age</H5>

+				<i></i><BR/>

+		

+				<H5>Die At Wealth 0</H5>

+				<i></i><BR/>

+		

+

+						

+							<H3>Play Cell</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+

+							<H4>Behaviors</H4>

+							

+		

+

+						

+						

+					<H2>Projections</H2>

+					

+		

+				<H5>Game Space  (2-Dimensional Grid)</H5>

+				<i></i><BR/>

+		

+

+			    

+			<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/Epidemic.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/Epidemic.html
new file mode 100644
index 0000000..d78bb9e
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/Epidemic.html
@@ -0,0 +1,284 @@
+		<HTML>

+			<HEAD>

+				<TITLE>Epidemic</TITLE>

+				<STYLE TYPE="text/css">

+					body,

+					html {

+    					margin:0;

+    					padding:0;

+    					

+    					color:#000;

+    				}

+    				body {

+    					min-width:750px;

+    				}

+					#wrap {

+    					

+    					margin:0 auto;

+    					width:1024px;

+    				}

+    				#header {

+    					border-bottom: solid 1px #BEBFAA;   						

+    					left: 220px;

+    				}

+					#nav {

+    					

+    				}

+					#nav ul{

+   						margin:0;

+    					padding:0;

+    					list-style:none;

+    				}

+					#nav li{

+    					display:inline;

+    					margin:0;

+    					padding:0;

+    				}

+    				#main {

+    					border-left: solid 1px #BEBFAA;   						

+    					

+    					float:left;

+    					width:800px;

+    				}

+					#sidebarfake {

+      					float:left;

+    					width:200px;

+    				}

+					#sidebar {

+  						position: fixed;

+      					float:left;

+    					width:200px;

+    				}

+					#footer {

+    					border-top: solid 1px #BEBFAA;   						

+    					

+    					clear:both;

+    				}

+    				

+					#section {

+  						background: #FFFFDC;

+   						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+					#section h1 {

+   						text-align: left;

+   						font-family: sans-serif;

+					}

+					#section p {

+   						text-indent: 2em;

+					}

+					#section p.noindent {

+   						text-indent: 0;

+					}

+					

+					#agent {

+  						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+

+					#agents {

+						border-bottom: solid 1px black;

+						border-left: solid 1px #BEBFAA;

+						border-right: solid 1px black;

+						border-top: solid 1px #BEBFAA;

+						margin: 2em 1em 1em 2em;

+						padding: 0.5em 2em 2em 2em;

+						text-align: justify;

+					}

+				</STYLE>

+			</HEAD>

+			<BODY>

+			<div id="wrap">

+    			<div id="header">

+    				<H1>Epidemic</H1>

+					<P>A simple model of epidemic dynamics. We define individual agents with different disease states. The progression of disease moves from succeptible to exposed to infectious (either symptomatic or asymptomatic) to some outcome state. Agents can transmit infection to their immediate neighbors.
+
+For some background on the general approach, see Joshua M. Epstein. "Generative Social Science". 2006. Princeton. 
+
+Copyright 2009, Miles Parker. Released under Eclipse Public License. All uses should be attributed.</P>

+    			</div>

+    			<div id="sidebarfake">

+    				<H1>   </H1>

+    			</div>

+    			<div id="sidebar">

+			    <ul>

+    					<li><a href="#parlink">Parameters</a></li>

+    					<li><a href="#behaviorlink">Behaviors</a></li>

+    					<li><a href="#agentslink">Agents</a>

+    					<ul>

+    					<li><a href="#individuallink">Individual</a></li>

+    					<li><a href="#locationlink">Location</a></li>

+    					</ul></li>

+    					<li><a href="#projlink">Projections</a></li>

+    				</ul>    				

+    			</div>

+    			<div id="main">

+    					<div id="agent">

+    					<h3><a name="parlink">Parameters</a></h3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Individual Count</td>

+						<td>Integer</td>

+						<td>250</td></tr>

+					<tr><td colspan="3"><i>The number of individuals to create.</i></td></tr></tbody>

+					<tbody ><tr><td>Initial Infection Probability</td>

+						<td>Real</td>

+						<td>.05</td></tr>

+					<tr><td colspan="3"><i>The probability that any given individual will be infected at the beginning of the model run. For example, if this value is .15, and their are 100 individuals in the model, roughly 15 of those individuals will be infected at time 0.</i></td></tr></tbody>

+					<tbody ><tr><td>Min Contact Transmission Probability</td>

+						<td>Real</td>

+						<td>.08</td></tr>

+					<tr><td colspan="3"><i>The minimum probability that proximity to a single neighbor for a single period will result in transmission of infection. At the start of each model run, each individual is assigned a contact transmission probability between the minimum and maximum value. For example, if this value was .08 and the maximum value was 0.12 a given individual could have any value between those two, but the average transmission probability would be around .1. If minium and maximum values are the same, then all individuals will have the same chance of passing along infection to a given neighbor. This value must be between 0.0 and 1.0 and less than or equal to Max Contact transmission Probability.</i></td></tr></tbody>

+					<tbody ><tr><td>Max Contact Transmission Probability</td>

+						<td>Real</td>

+						<td>.16</td></tr>

+					<tr><td colspan="3"><i>The maximum probability that proximity to a single neighbor for a single period will result in transmission of infection. See Min Contact Probability for more information. Must be a value between 0.0 and 1.0 and greater or equal to Min Contact Transmission Probability.</i></td></tr></tbody>

+					<tbody ><tr><td>Case Mortality Rate</td>

+						<td>Real</td>

+						<td>.05</td></tr>

+					<tr><td colspan="3"><i>The current probability that death will occur for a given individual as a result of infection. Some number between 0.0 and 1.0.</i></td></tr></tbody>

+					<tbody ><tr><td>Periods per Day</td>

+						<td>Integer</td>

+						<td>24</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Min Period Exposure</td>

+						<td>Integer</td>

+						<td>15</td></tr>

+					<tr><td colspan="3"><i>The minimum amount of time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater.</i></td></tr></tbody>

+					<tbody ><tr><td>Max Period Exposure</td>

+						<td>Integer</td>

+						<td>24</td></tr>

+					<tr><td colspan="3"><i>Maximum time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater.</i></td></tr></tbody>

+					<tbody ><tr><td>Min Period Asymptom Infection</td>

+						<td>Integer</td>

+						<td>24</td></tr>

+					<tr><td colspan="3"><i>Maximum time spent infected without showing symptoms. 0 or greater.</i></td></tr></tbody>

+					<tbody ><tr><td>Max Period Asymptom Infection</td>

+						<td>Integer</td>

+						<td>48</td></tr>

+					<tr><td colspan="3"><i>Maximum time spent infected without showing symptoms. May be zero!</i></td></tr></tbody>

+					<tbody ><tr><td>Min Period Symptom Infection</td>

+						<td>Integer</td>

+						<td>24</td></tr>

+					<tr><td colspan="3"><i>Minimum time spent infected with obvious symptoms. 0 or greater.</i></td></tr></tbody>

+					<tbody ><tr><td>Max Period Symptom Infection</td>

+						<td>Integer</td>

+						<td>168</td></tr>

+					<tr><td colspan="3"><i>Maximum time spent infected with obvious symptoms. 1 or greater.</i></td></tr></tbody>

+					<tbody ><tr><td>Movement Probability</td>

+						<td>Real</td>

+						<td>.5</td></tr>

+					<tr><td colspan="3"><i>The chance that an agent will move within a given period. May be any value between 0.0 and 1.0.</i></td></tr></tbody>

+		</table>

+    					<h3><a name="behaviorlink">Behaviors</a></h3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Build Epidemic</i></td>

+						<td>Build internal state for Epidemic.</td>

+					</tr>

+					<tr>

+						<td><i>Initialize Probabilities</i></td>

+						<td></td>

+					</tr>

+		</table>

+						</div>

+    					<div id="agents">

+    					<h1><a name="agentslink">Agents</a></h1>

+								<div id="agent">

+									<H2><a name="individuallink"/>Individual</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Status</td>

+						<td>String</td>

+						<td>Susceptible</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Exposure End Period</td>

+						<td>Integer</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Asymptomatic End Period</td>

+						<td>Integer</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Outcome Period</td>

+						<td>Integer</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Contact Transmission Probability</td>

+						<td>Real</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Initialize Location</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Movement</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Initialize State</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Transmission</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Progression</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Exposure</i></td>

+						<td>Watch for changes in Status.</td>

+					</tr>

+		</table>

+								</div>

+								<div id="agent">

+									<H2><a name="locationlink"/>Location</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+		</table>

+								</div>

+						</div>

+					<div id="section">

+						<H2><a name="projlink"/>Projections:</a></H2>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Name</th><th>Description</th><th>Type</th></tr></thead>

+					<tr>

+						<td><i>City</i></td>

+						<td></td>

+						<td>2-Dimensional Grid</td>

+					</tr>

+		</table>

+					</div>			    			

+    			</div>

+			    

+    			<div id="footer">

+    				<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+    			</div>

+			</div>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/EpidemicSimple.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/EpidemicSimple.html
new file mode 100644
index 0000000..62bf2ba
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/EpidemicSimple.html
@@ -0,0 +1,125 @@
+

+		<HTML>

+			<HEAD>

+				<TITLE>Epidemic</TITLE>

+			</HEAD>

+			<BODY>

+				<H1>Epidemic</H1>

+				<P>A simple model of epidemic dynamics. We define individual agents with different disease states. The progression of disease moves from succeptible to exposed to infectious (either symptomatic or asymptomatic) to some outcome state. Agents can transmit infection to their immediate neighbors.
+
+For some background on the general approach, see Joshua M. Epstein. "Generative Social Science". 2006. Princeton. 
+
+Copyright 2009, Miles Parker. Released under Eclipse Public License. All uses should be attributed.</P>

+					<h2>Parameters</h2>

+						

+		

+				<H5>Individual Count  (int, default: 250)</H5>

+				<i>The number of individuals to create.</i><BR/>

+		

+				<H5>Initial Infection Probability  (double, default: .05)</H5>

+				<i>The probability that any given individual will be infected at the beginning of the model run. For example, if this value is .15, and their are 100 individuals in the model, roughly 15 of those individuals will be infected at time 0.</i><BR/>

+		

+				<H5>Min Contact Transmission Probability  (double, default: .08)</H5>

+				<i>The minimum probability that proximity to a single neighbor for a single period will result in transmission of infection. At the start of each model run, each individual is assigned a contact transmission probability between the minimum and maximum value. For example, if this value was .08 and the maximum value was 0.12 a given individual could have any value between those two, but the average transmission probability would be around .1. If minium and maximum values are the same, then all individuals will have the same chance of passing along infection to a given neighbor. This value must be between 0.0 and 1.0 and less than or equal to Max Contact transmission Probability.</i><BR/>

+		

+				<H5>Max Contact Transmission Probability  (double, default: .16)</H5>

+				<i>The maximum probability that proximity to a single neighbor for a single period will result in transmission of infection. See Min Contact Probability for more information. Must be a value between 0.0 and 1.0 and greater or equal to Min Contact Transmission Probability.</i><BR/>

+		

+				<H5>Case Mortality Rate  (double, default: .05)</H5>

+				<i>The current probability that death will occur for a given individual as a result of infection. Some number between 0.0 and 1.0.</i><BR/>

+		

+				<H5>Periods per Day  (int, default: 24)</H5>

+				<i></i><BR/>

+		

+				<H5>Min Period Exposure  (int, default: 15)</H5>

+				<i>The minimum amount of time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater.</i><BR/>

+		

+				<H5>Max Period Exposure  (int, default: 24)</H5>

+				<i>Maximum time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater.</i><BR/>

+		

+				<H5>Min Period Asymptom Infection  (int, default: 24)</H5>

+				<i>Maximum time spent infected without showing symptoms. 0 or greater.</i><BR/>

+		

+				<H5>Max Period Asymptom Infection  (int, default: 48)</H5>

+				<i>Maximum time spent infected without showing symptoms. May be zero!</i><BR/>

+		

+				<H5>Min Period Symptom Infection  (int, default: 24)</H5>

+				<i>Minimum time spent infected with obvious symptoms. 0 or greater.</i><BR/>

+		

+				<H5>Max Period Symptom Infection  (int, default: 168)</H5>

+				<i>Maximum time spent infected with obvious symptoms. 1 or greater.</i><BR/>

+		

+				<H5>Movement Probability  (double, default: .5)</H5>

+				<i>The chance that an agent will move within a given period. May be any value between 0.0 and 1.0.</i><BR/>

+		

+

+					<h2><ul>Agents</ul></h2>

+						

+							<H3>Individual</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+				<H5>Status  (StatusEnum, default: Susceptible)</H5>

+				<i></i><BR/>

+		

+				<H5>Exposure End Period  (int, default: )</H5>

+				<i></i><BR/>

+		

+				<H5>Asymptomatic End Period  (int, default: )</H5>

+				<i></i><BR/>

+		

+				<H5>Outcome Period  (int, default: )</H5>

+				<i></i><BR/>

+		

+				<H5>Contact Transmission Probability  (double, default: )</H5>

+				<i></i><BR/>

+		

+

+							<H4>Behaviors</H4>

+							

+		

+				<H5>Initialize Location</H5>

+				<i></i><BR/>

+		

+				<H5>Movement</H5>

+				<i></i><BR/>

+		

+				<H5>Initialize State</H5>

+				<i></i><BR/>

+		

+				<H5>Transmission</H5>

+				<i></i><BR/>

+		

+				<H5>Progression</H5>

+				<i></i><BR/>

+		

+				<H5>Exposure</H5>

+				<i>Watch for changes in Status.</i><BR/>

+		

+

+						

+							<H3>Location</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+

+							<H4>Behaviors</H4>

+							

+		

+

+						

+						

+					<H2>Projections</H2>

+					

+		

+				<H5>City  (2-Dimensional Grid)</H5>

+				<i></i><BR/>

+		

+

+			    

+			<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel1.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel1.html
new file mode 100644
index 0000000..6cb44b9
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel1.html
@@ -0,0 +1,200 @@
+		<HTML>

+			<HEAD>

+				<TITLE>StupidModel1</TITLE>

+				<STYLE TYPE="text/css">

+					body,

+					html {

+    					margin:0;

+    					padding:0;

+    					

+    					color:#000;

+    				}

+    				body {

+    					min-width:750px;

+    				}

+					#wrap {

+    					

+    					margin:0 auto;

+    					width:1024px;

+    				}

+    				#header {

+    					border-bottom: solid 1px #BEBFAA;   						

+    					left: 220px;

+    				}

+					#nav {

+    					

+    				}

+					#nav ul{

+   						margin:0;

+    					padding:0;

+    					list-style:none;

+    				}

+					#nav li{

+    					display:inline;

+    					margin:0;

+    					padding:0;

+    				}

+    				#main {

+    					border-left: solid 1px #BEBFAA;   						

+    					

+    					float:left;

+    					width:800px;

+    				}

+					#sidebarfake {

+      					float:left;

+    					width:200px;

+    				}

+					#sidebar {

+  						position: fixed;

+      					float:left;

+    					width:200px;

+    				}

+					#footer {

+    					border-top: solid 1px #BEBFAA;   						

+    					

+    					clear:both;

+    				}

+    				

+					#section {

+  						background: #FFFFDC;

+   						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+					#section h1 {

+   						text-align: left;

+   						font-family: sans-serif;

+					}

+					#section p {

+   						text-indent: 2em;

+					}

+					#section p.noindent {

+   						text-indent: 0;

+					}

+					

+					#agent {

+  						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+

+					#agents {

+						border-bottom: solid 1px black;

+						border-left: solid 1px #BEBFAA;

+						border-right: solid 1px black;

+						border-top: solid 1px #BEBFAA;

+						margin: 2em 1em 1em 2em;

+						padding: 0.5em 2em 2em 2em;

+						text-align: justify;

+					}

+				</STYLE>

+			</HEAD>

+			<BODY>

+			<div id="wrap">

+    			<div id="header">

+    				<H1>StupidModel1</H1>

+					<P></P>

+    			</div>

+    			<div id="sidebarfake">

+    				<H1>   </H1>

+    			</div>

+    			<div id="sidebar">

+			    <ul>

+    					<li><a href="#parlink">Parameters</a></li>

+    					<li><a href="#behaviorlink">Behaviors</a></li>

+    					<li><a href="#agentslink">Agents</a>

+    					<ul>

+    					<li><a href="#buglink">Bug</a></li>

+    					<li><a href="#habitatlink">Habitat</a></li>

+    					</ul></li>

+    					<li><a href="#projlink">Projections</a></li>

+    				</ul>    				

+    			</div>

+    			<div id="main">

+    					<div id="agent">

+    					<h3><a name="parlink">Parameters</a></h3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Bug Count</td>

+						<td>Integer</td>

+						<td>100</td></tr>

+					<tr><td colspan="3"><i>The number of bugs to create.</i></td></tr></tbody>

+					<tbody ><tr><td>Habitat Count</td>

+						<td>Integer</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i>The number of habitats to create.</i></td></tr></tbody>

+					<tbody ><tr><td>Bug Vision</td>

+						<td>Integer</td>

+						<td>4</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+    					<h3><a name="behaviorlink">Behaviors</a></h3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Build StupidModel1</i></td>

+						<td>Build internal state for StupidModel1.</td>

+					</tr>

+		</table>

+						</div>

+    					<div id="agents">

+    					<h1><a name="agentslink">Agents</a></h1>

+								<div id="agent">

+									<H2><a name="buglink"/>Bug</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Initialize</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Bug Rule</i></td>

+						<td>Move to a neighboring space. (In this version we also have to manually notify the bug's broker. :( )</td>

+					</tr>

+		</table>

+								</div>

+								<div id="agent">

+									<H2><a name="habitatlink"/>Habitat</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+		</table>

+								</div>

+						</div>

+					<div id="section">

+						<H2><a name="projlink"/>Projections:</a></H2>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Name</th><th>Description</th><th>Type</th></tr></thead>

+					<tr>

+						<td><i>Grid 2D</i></td>

+						<td></td>

+						<td>2-Dimensional Grid</td>

+					</tr>

+		</table>

+					</div>			    			

+    			</div>

+			    

+    			<div id="footer">

+    				<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+    			</div>

+			</div>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel1Simple.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel1Simple.html
new file mode 100644
index 0000000..66e6d31
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel1Simple.html
@@ -0,0 +1,64 @@
+

+		<HTML>

+			<HEAD>

+				<TITLE>StupidModel1</TITLE>

+			</HEAD>

+			<BODY>

+				<H1>StupidModel1</H1>

+				<P></P>

+					<h2>Parameters</h2>

+						

+		

+				<H5>Bug Count  (int, default: 100)</H5>

+				<i>The number of bugs to create.</i><BR/>

+		

+				<H5>Habitat Count  (int, default: )</H5>

+				<i>The number of habitats to create.</i><BR/>

+		

+				<H5>Bug Vision  (int, default: 4)</H5>

+				<i></i><BR/>

+		

+

+					<h2><ul>Agents</ul></h2>

+						

+							<H3>Bug</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+

+							<H4>Behaviors</H4>

+							

+		

+				<H5>Initialize</H5>

+				<i></i><BR/>

+		

+				<H5>Bug Rule</H5>

+				<i>Move to a neighboring space. (In this version we also have to manually notify the bug's broker. :( )</i><BR/>

+		

+

+						

+							<H3>Habitat</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+

+							<H4>Behaviors</H4>

+							

+		

+

+						

+						

+					<H2>Projections</H2>

+					

+		

+				<H5>Grid 2D  (2-Dimensional Grid)</H5>

+				<i></i><BR/>

+		

+

+			    

+			<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel2.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel2.html
new file mode 100644
index 0000000..94434db
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel2.html
@@ -0,0 +1,212 @@
+		<HTML>

+			<HEAD>

+				<TITLE>Stupid Model 2</TITLE>

+				<STYLE TYPE="text/css">

+					body,

+					html {

+    					margin:0;

+    					padding:0;

+    					

+    					color:#000;

+    				}

+    				body {

+    					min-width:750px;

+    				}

+					#wrap {

+    					

+    					margin:0 auto;

+    					width:1024px;

+    				}

+    				#header {

+    					border-bottom: solid 1px #BEBFAA;   						

+    					left: 220px;

+    				}

+					#nav {

+    					

+    				}

+					#nav ul{

+   						margin:0;

+    					padding:0;

+    					list-style:none;

+    				}

+					#nav li{

+    					display:inline;

+    					margin:0;

+    					padding:0;

+    				}

+    				#main {

+    					border-left: solid 1px #BEBFAA;   						

+    					

+    					float:left;

+    					width:800px;

+    				}

+					#sidebarfake {

+      					float:left;

+    					width:200px;

+    				}

+					#sidebar {

+  						position: fixed;

+      					float:left;

+    					width:200px;

+    				}

+					#footer {

+    					border-top: solid 1px #BEBFAA;   						

+    					

+    					clear:both;

+    				}

+    				

+					#section {

+  						background: #FFFFDC;

+   						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+					#section h1 {

+   						text-align: left;

+   						font-family: sans-serif;

+					}

+					#section p {

+   						text-indent: 2em;

+					}

+					#section p.noindent {

+   						text-indent: 0;

+					}

+					

+					#agent {

+  						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+

+					#agents {

+						border-bottom: solid 1px black;

+						border-left: solid 1px #BEBFAA;

+						border-right: solid 1px black;

+						border-top: solid 1px #BEBFAA;

+						margin: 2em 1em 1em 2em;

+						padding: 0.5em 2em 2em 2em;

+						text-align: justify;

+					}

+				</STYLE>

+			</HEAD>

+			<BODY>

+			<div id="wrap">

+    			<div id="header">

+    				<H1>Stupid Model 2</H1>

+					<P></P>

+    			</div>

+    			<div id="sidebarfake">

+    				<H1>   </H1>

+    			</div>

+    			<div id="sidebar">

+			    <ul>

+    					<li><a href="#parlink">Parameters</a></li>

+    					<li><a href="#behaviorlink">Behaviors</a></li>

+    					<li><a href="#agentslink">Agents</a>

+    					<ul>

+    					<li><a href="#buglink">Bug</a></li>

+    					<li><a href="#habitatlink">Habitat</a></li>

+    					</ul></li>

+    					<li><a href="#projlink">Projections</a></li>

+    				</ul>    				

+    			</div>

+    			<div id="main">

+    					<div id="agent">

+    					<h3><a name="parlink">Parameters</a></h3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Bug Count</td>

+						<td>Integer</td>

+						<td>100</td></tr>

+					<tr><td colspan="3"><i>The number of bugs to create.</i></td></tr></tbody>

+					<tbody ><tr><td>Habitat Count</td>

+						<td>Integer</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i>The number of habitats to create.</i></td></tr></tbody>

+					<tbody ><tr><td>Max Bug Size Color</td>

+						<td>Boolean</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Bug Vision</td>

+						<td>Integer</td>

+						<td>4</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+    					<h3><a name="behaviorlink">Behaviors</a></h3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Build basicModel</i></td>

+						<td>Build internal state for Stupid Model 2.</td>

+					</tr>

+		</table>

+						</div>

+    					<div id="agents">

+    					<h1><a name="agentslink">Agents</a></h1>

+								<div id="agent">

+									<H2><a name="buglink"/>Bug</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Size</td>

+						<td>Integer</td>

+						<td>0</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Initialize</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Random Movement</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Grow</i></td>

+						<td></td>

+					</tr>

+		</table>

+								</div>

+								<div id="agent">

+									<H2><a name="habitatlink"/>Habitat</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+		</table>

+								</div>

+						</div>

+					<div id="section">

+						<H2><a name="projlink"/>Projections:</a></H2>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Name</th><th>Description</th><th>Type</th></tr></thead>

+					<tr>

+						<td><i>Grid 2D</i></td>

+						<td></td>

+						<td>2-Dimensional Grid</td>

+					</tr>

+		</table>

+					</div>			    			

+    			</div>

+			    

+    			<div id="footer">

+    				<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+    			</div>

+			</div>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel2Simple.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel2Simple.html
new file mode 100644
index 0000000..895fbd9
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel2Simple.html
@@ -0,0 +1,73 @@
+

+		<HTML>

+			<HEAD>

+				<TITLE>Stupid Model 2</TITLE>

+			</HEAD>

+			<BODY>

+				<H1>Stupid Model 2</H1>

+				<P></P>

+					<h2>Parameters</h2>

+						

+		

+				<H5>Bug Count  (int, default: 100)</H5>

+				<i>The number of bugs to create.</i><BR/>

+		

+				<H5>Habitat Count  (int, default: )</H5>

+				<i>The number of habitats to create.</i><BR/>

+		

+				<H5>Max Bug Size Color  (boolean, default: )</H5>

+				<i></i><BR/>

+		

+				<H5>Bug Vision  (int, default: 4)</H5>

+				<i></i><BR/>

+		

+

+					<h2><ul>Agents</ul></h2>

+						

+							<H3>Bug</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+				<H5>Size  (int, default: 0)</H5>

+				<i></i><BR/>

+		

+

+							<H4>Behaviors</H4>

+							

+		

+				<H5>Initialize</H5>

+				<i></i><BR/>

+		

+				<H5>Random Movement</H5>

+				<i></i><BR/>

+		

+				<H5>Grow</H5>

+				<i></i><BR/>

+		

+

+						

+							<H3>Habitat</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+

+							<H4>Behaviors</H4>

+							

+		

+

+						

+						

+					<H2>Projections</H2>

+					

+		

+				<H5>Grid 2D  (2-Dimensional Grid)</H5>

+				<i></i><BR/>

+		

+

+			    

+			<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel3.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel3.html
new file mode 100644
index 0000000..e29cc0d
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel3.html
@@ -0,0 +1,220 @@
+		<HTML>

+			<HEAD>

+				<TITLE>Stupid Model 3</TITLE>

+				<STYLE TYPE="text/css">

+					body,

+					html {

+    					margin:0;

+    					padding:0;

+    					

+    					color:#000;

+    				}

+    				body {

+    					min-width:750px;

+    				}

+					#wrap {

+    					

+    					margin:0 auto;

+    					width:1024px;

+    				}

+    				#header {

+    					border-bottom: solid 1px #BEBFAA;   						

+    					left: 220px;

+    				}

+					#nav {

+    					

+    				}

+					#nav ul{

+   						margin:0;

+    					padding:0;

+    					list-style:none;

+    				}

+					#nav li{

+    					display:inline;

+    					margin:0;

+    					padding:0;

+    				}

+    				#main {

+    					border-left: solid 1px #BEBFAA;   						

+    					

+    					float:left;

+    					width:800px;

+    				}

+					#sidebarfake {

+      					float:left;

+    					width:200px;

+    				}

+					#sidebar {

+  						position: fixed;

+      					float:left;

+    					width:200px;

+    				}

+					#footer {

+    					border-top: solid 1px #BEBFAA;   						

+    					

+    					clear:both;

+    				}

+    				

+					#section {

+  						background: #FFFFDC;

+   						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+					#section h1 {

+   						text-align: left;

+   						font-family: sans-serif;

+					}

+					#section p {

+   						text-indent: 2em;

+					}

+					#section p.noindent {

+   						text-indent: 0;

+					}

+					

+					#agent {

+  						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+

+					#agents {

+						border-bottom: solid 1px black;

+						border-left: solid 1px #BEBFAA;

+						border-right: solid 1px black;

+						border-top: solid 1px #BEBFAA;

+						margin: 2em 1em 1em 2em;

+						padding: 0.5em 2em 2em 2em;

+						text-align: justify;

+					}

+				</STYLE>

+			</HEAD>

+			<BODY>

+			<div id="wrap">

+    			<div id="header">

+    				<H1>Stupid Model 3</H1>

+					<P></P>

+    			</div>

+    			<div id="sidebarfake">

+    				<H1>   </H1>

+    			</div>

+    			<div id="sidebar">

+			    <ul>

+    					<li><a href="#parlink">Parameters</a></li>

+    					<li><a href="#behaviorlink">Behaviors</a></li>

+    					<li><a href="#agentslink">Agents</a>

+    					<ul>

+    					<li><a href="#buglink">Bug</a></li>

+    					<li><a href="#habitatlink">Habitat</a></li>

+    					</ul></li>

+    					<li><a href="#projlink">Projections</a></li>

+    				</ul>    				

+    			</div>

+    			<div id="main">

+    					<div id="agent">

+    					<h3><a name="parlink">Parameters</a></h3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Bug Count</td>

+						<td>Integer</td>

+						<td>100</td></tr>

+					<tr><td colspan="3"><i>The number of bugs to create.</i></td></tr></tbody>

+					<tbody ><tr><td>Habitat Count</td>

+						<td>Integer</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i>The number of habitats to create.</i></td></tr></tbody>

+					<tbody ><tr><td>Bug Vision</td>

+						<td>Integer</td>

+						<td>4</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+    					<h3><a name="behaviorlink">Behaviors</a></h3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Build stupidModel3</i></td>

+						<td>Build internal state for Stupid Model 3.</td>

+					</tr>

+		</table>

+						</div>

+    					<div id="agents">

+    					<h1><a name="agentslink">Agents</a></h1>

+								<div id="agent">

+									<H2><a name="buglink"/>Bug</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Size</td>

+						<td>Integer</td>

+						<td>0</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Initialize</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Random Movement</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Grow</i></td>

+						<td></td>

+					</tr>

+		</table>

+								</div>

+								<div id="agent">

+									<H2><a name="habitatlink"/>Habitat</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>FoodAvailability</td>

+						<td>Real</td>

+						<td>0.0</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>MaximumFoodProductionRate</td>

+						<td>Real</td>

+						<td>0.01</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>determindFoodProduction</i></td>

+						<td></td>

+					</tr>

+		</table>

+								</div>

+						</div>

+					<div id="section">

+						<H2><a name="projlink"/>Projections:</a></H2>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Name</th><th>Description</th><th>Type</th></tr></thead>

+					<tr>

+						<td><i>Grid 2D</i></td>

+						<td></td>

+						<td>2-Dimensional Grid</td>

+					</tr>

+		</table>

+					</div>			    			

+    			</div>

+			    

+    			<div id="footer">

+    				<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+    			</div>

+			</div>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel3Simple.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel3Simple.html
new file mode 100644
index 0000000..95f3274
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel3Simple.html
@@ -0,0 +1,79 @@
+

+		<HTML>

+			<HEAD>

+				<TITLE>Stupid Model 3</TITLE>

+			</HEAD>

+			<BODY>

+				<H1>Stupid Model 3</H1>

+				<P></P>

+					<h2>Parameters</h2>

+						

+		

+				<H5>Bug Count  (int, default: 100)</H5>

+				<i>The number of bugs to create.</i><BR/>

+		

+				<H5>Habitat Count  (int, default: )</H5>

+				<i>The number of habitats to create.</i><BR/>

+		

+				<H5>Bug Vision  (int, default: 4)</H5>

+				<i></i><BR/>

+		

+

+					<h2><ul>Agents</ul></h2>

+						

+							<H3>Bug</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+				<H5>Size  (int, default: 0)</H5>

+				<i></i><BR/>

+		

+

+							<H4>Behaviors</H4>

+							

+		

+				<H5>Initialize</H5>

+				<i></i><BR/>

+		

+				<H5>Random Movement</H5>

+				<i></i><BR/>

+		

+				<H5>Grow</H5>

+				<i></i><BR/>

+		

+

+						

+							<H3>Habitat</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+				<H5>FoodAvailability  (double, default: 0.0)</H5>

+				<i></i><BR/>

+		

+				<H5>MaximumFoodProductionRate  (double, default: 0.01)</H5>

+				<i></i><BR/>

+		

+

+							<H4>Behaviors</H4>

+							

+		

+				<H5>determindFoodProduction</H5>

+				<i></i><BR/>

+		

+

+						

+						

+					<H2>Projections</H2>

+					

+		

+				<H5>Grid 2D  (2-Dimensional Grid)</H5>

+				<i></i><BR/>

+		

+

+			    

+			<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel5.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel5.html
new file mode 100644
index 0000000..f12f4ea
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel5.html
@@ -0,0 +1,228 @@
+		<HTML>

+			<HEAD>

+				<TITLE>Stupid Model 5</TITLE>

+				<STYLE TYPE="text/css">

+					body,

+					html {

+    					margin:0;

+    					padding:0;

+    					

+    					color:#000;

+    				}

+    				body {

+    					min-width:750px;

+    				}

+					#wrap {

+    					

+    					margin:0 auto;

+    					width:1024px;

+    				}

+    				#header {

+    					border-bottom: solid 1px #BEBFAA;   						

+    					left: 220px;

+    				}

+					#nav {

+    					

+    				}

+					#nav ul{

+   						margin:0;

+    					padding:0;

+    					list-style:none;

+    				}

+					#nav li{

+    					display:inline;

+    					margin:0;

+    					padding:0;

+    				}

+    				#main {

+    					border-left: solid 1px #BEBFAA;   						

+    					

+    					float:left;

+    					width:800px;

+    				}

+					#sidebarfake {

+      					float:left;

+    					width:200px;

+    				}

+					#sidebar {

+  						position: fixed;

+      					float:left;

+    					width:200px;

+    				}

+					#footer {

+    					border-top: solid 1px #BEBFAA;   						

+    					

+    					clear:both;

+    				}

+    				

+					#section {

+  						background: #FFFFDC;

+   						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+					#section h1 {

+   						text-align: left;

+   						font-family: sans-serif;

+					}

+					#section p {

+   						text-indent: 2em;

+					}

+					#section p.noindent {

+   						text-indent: 0;

+					}

+					

+					#agent {

+  						border-bottom: solid 1px black;

+   						border-left: solid 1px #BEBFAA;

+   						border-right: solid 1px black;

+   						border-top: solid 1px #BEBFAA;

+   						margin: 2em 1em 1em 2em;

+   						padding: 0.5em 2em 2em 2em;

+   						text-align: justify;

+					}

+

+					#agents {

+						border-bottom: solid 1px black;

+						border-left: solid 1px #BEBFAA;

+						border-right: solid 1px black;

+						border-top: solid 1px #BEBFAA;

+						margin: 2em 1em 1em 2em;

+						padding: 0.5em 2em 2em 2em;

+						text-align: justify;

+					}

+				</STYLE>

+			</HEAD>

+			<BODY>

+			<div id="wrap">

+    			<div id="header">

+    				<H1>Stupid Model 5</H1>

+					<P></P>

+    			</div>

+    			<div id="sidebarfake">

+    				<H1>   </H1>

+    			</div>

+    			<div id="sidebar">

+			    <ul>

+    					<li><a href="#parlink">Parameters</a></li>

+    					<li><a href="#behaviorlink">Behaviors</a></li>

+    					<li><a href="#agentslink">Agents</a>

+    					<ul>

+    					<li><a href="#buglink">Bug</a></li>

+    					<li><a href="#habitatlink">Habitat</a></li>

+    					</ul></li>

+    					<li><a href="#projlink">Projections</a></li>

+    				</ul>    				

+    			</div>

+    			<div id="main">

+    					<div id="agent">

+    					<h3><a name="parlink">Parameters</a></h3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Bug Count</td>

+						<td>Integer</td>

+						<td>100</td></tr>

+					<tr><td colspan="3"><i>The number of bugs to create.</i></td></tr></tbody>

+					<tbody ><tr><td>Habitat Count</td>

+						<td>Integer</td>

+						<td></td></tr>

+					<tr><td colspan="3"><i>The number of habitats to create.</i></td></tr></tbody>

+					<tbody ><tr><td>Bug Vision</td>

+						<td>Integer</td>

+						<td>4</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+    					<h3><a name="behaviorlink">Behaviors</a></h3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Build stupidModel3</i></td>

+						<td>Build internal state for Stupid Model 5.</td>

+					</tr>

+		</table>

+						</div>

+    					<div id="agents">

+    					<h1><a name="agentslink">Agents</a></h1>

+								<div id="agent">

+									<H2><a name="buglink"/>Bug</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>Size</td>

+						<td>Real</td>

+						<td>0.0</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Consumption</td>

+						<td>Real</td>

+						<td>0.0</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>Max Consumption</td>

+						<td>Real</td>

+						<td>0.2</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>Initialize</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Random Movement</i></td>

+						<td></td>

+					</tr>

+					<tr>

+						<td><i>Grow</i></td>

+						<td></td>

+					</tr>

+		</table>

+								</div>

+								<div id="agent">

+									<H2><a name="habitatlink"/>Habitat</a></H2>

+									<H3>Attributes</H3>

+		<table CELLPADDING="10px" rules="groups">

+			<thead align="left"><tr><th>Name</th><th>Type</th><th>Default Value</th></tr></thead>

+					<tbody ><tr><td>FoodAvailability</td>

+						<td>Real</td>

+						<td>0.0</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+					<tbody ><tr><td>MaximumFoodProductionRate</td>

+						<td>Real</td>

+						<td>0.5</td></tr>

+					<tr><td colspan="3"><i></i></td></tr></tbody>

+		</table>

+									<H3>Behaviors</H3>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Act</th><th>Description</th></tr></thead>

+					<tr>

+						<td><i>determindFoodProduction</i></td>

+						<td></td>

+					</tr>

+		</table>

+								</div>

+						</div>

+					<div id="section">

+						<H2><a name="projlink"/>Projections:</a></H2>

+		<table CELLPADDING="10px">

+			<thead align="left"><tr><th>Name</th><th>Description</th><th>Type</th></tr></thead>

+					<tr>

+						<td><i>Grid 2D</i></td>

+						<td></td>

+						<td>2-Dimensional Grid</td>

+					</tr>

+		</table>

+					</div>			    			

+    			</div>

+			    

+    			<div id="footer">

+    				<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+    			</div>

+			</div>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel5Simple.html b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel5Simple.html
new file mode 100644
index 0000000..5851e6a
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/doc/StupidModel5Simple.html
@@ -0,0 +1,85 @@
+

+		<HTML>

+			<HEAD>

+				<TITLE>Stupid Model 5</TITLE>

+			</HEAD>

+			<BODY>

+				<H1>Stupid Model 5</H1>

+				<P></P>

+					<h2>Parameters</h2>

+						

+		

+				<H5>Bug Count  (int, default: 100)</H5>

+				<i>The number of bugs to create.</i><BR/>

+		

+				<H5>Habitat Count  (int, default: )</H5>

+				<i>The number of habitats to create.</i><BR/>

+		

+				<H5>Bug Vision  (int, default: 4)</H5>

+				<i></i><BR/>

+		

+

+					<h2><ul>Agents</ul></h2>

+						

+							<H3>Bug</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+				<H5>Size  (double, default: 0.0)</H5>

+				<i></i><BR/>

+		

+				<H5>Consumption  (double, default: 0.0)</H5>

+				<i></i><BR/>

+		

+				<H5>Max Consumption  (double, default: 0.2)</H5>

+				<i></i><BR/>

+		

+

+							<H4>Behaviors</H4>

+							

+		

+				<H5>Initialize</H5>

+				<i></i><BR/>

+		

+				<H5>Random Movement</H5>

+				<i></i><BR/>

+		

+				<H5>Grow</H5>

+				<i></i><BR/>

+		

+

+						

+							<H3>Habitat</H3>

+							

+							<H4>Attributes</H4>

+							

+		

+				<H5>FoodAvailability  (double, default: 0.0)</H5>

+				<i></i><BR/>

+		

+				<H5>MaximumFoodProductionRate  (double, default: 0.5)</H5>

+				<i></i><BR/>

+		

+

+							<H4>Behaviors</H4>

+							

+		

+				<H5>determindFoodProduction</H5>

+				<i></i><BR/>

+		

+

+						

+						

+					<H2>Projections</H2>

+					

+		

+				<H5>Grid 2D  (2-Dimensional Grid)</H5>

+				<i></i><BR/>

+		

+

+			    

+			<P>Generated by metaabm system: Sep 3, 2009 3:31:58 PM PDT.</P>

+			</BODY>

+		</HTML>
+	
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/src/name/milesparker/epi/Epidemic3D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/src/name/milesparker/epi/Epidemic3D.java
new file mode 100644
index 0000000..af69c70
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/src/name/milesparker/epi/Epidemic3D.java
@@ -0,0 +1,48 @@
+/**

+ * <copyright>

+ *

+ * Copyright (c) 2009 Metascape, LLC.

+ * All rights reserved.   This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *   Metascape - Initial API and Implementation

+ *

+ * </copyright>

+ *

+ */

+

+package name.milesparker.epi;

+

+import org.eclipse.amp.escape.ascape.adapt.Ascape3DPartFactory;

+import org.eclipse.amp.escape.ascape.agf3d.GEF3DView;

+import org.eclipse.gef.EditPart;

+import org.eclipse.gef.EditPartFactory;

+

+/**

+ * 

+ * @author mparker

+ *

+ */

+public class Epidemic3D extends Epidemic {

+    public void createGraphicViews() {

+        GEF3DView gef3DView = new GEF3DView();

+        addView(gef3DView);

+    }

+

+    public EditPartFactory getEditPart3DFactory() {

+        return new Ascape3DPartFactory() {

+            public EditPart getPartForElement(Object model) {

+                if (model instanceof Individual) {

+                    return new Individual3DEditPart();

+                }

+                if (model instanceof Location) {

+                    return new Tile3DEditPart();

+                }

+                return super.getPartForElement(model);

+            }

+        };

+    }

+}

diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/src/name/milesparker/epi/Individual3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/src/name/milesparker/epi/Individual3DEditPart.java
new file mode 100644
index 0000000..491bf94
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/src/name/milesparker/epi/Individual3DEditPart.java
@@ -0,0 +1,162 @@
+package name.milesparker.epi;
+
+import org.eclipse.amp.agf3d.RenderEdit3DPart;
+import org.eclipse.draw3d.graphics3d.Graphics3D;
+import org.eclipse.draw3d.graphics3d.Graphics3DDraw;
+import org.eclipse.draw3d.graphics3d.Graphics3DUtil;
+import org.lwjgl.util.glu.Cylinder;
+import org.lwjgl.util.glu.Disk;
+
+/**
+ * Gender Style Java Implementation.
+ * 
+ * Generated by metaabm system: Jun 1, 2009 6:36:11 PM PDT in project: edu.brook.parent.escape
+ */
+
+public class Individual3DEditPart extends RenderEdit3DPart {
+
+    private float totalHeight;
+
+    protected void renderShape(Graphics3D g3d) {
+        Individual adult = (Individual) getModel();
+        // float scale = 0.6f + adult.getAgeinYearsIndex() * .01f;
+        float scale = 1.0f;
+
+        float bodyWidth = 0.4f * scale;
+        float bodyDepth = 0.3f * scale;
+        float bodyHeight = 0.4f * scale;
+        float legWidth = 0.1f * scale;
+        float legHeight = 0.6f * scale;
+        float skirtHeight = 0.3f * scale;
+        float headWidth = 0.3f * scale;
+        float headHeight = 0.2f * scale;
+        totalHeight = legHeight + bodyHeight + headHeight;
+
+        // base
+        g3d.glTranslatef(0.5f, .5f, 0);
+
+        colorForStatus(g3d, adult);
+
+        // legs
+        // colorForEdu(g3d, adult);
+        g3d.glTranslatef(bodyWidth * .25f, bodyDepth / 2.0f, 0);
+        drawCylinder(g3d, legWidth, legHeight, false);
+        g3d.glTranslatef(bodyWidth * .5f, 0, 0);
+        drawCylinder(g3d, legWidth, legHeight, false);
+        g3d.glTranslatef(-bodyWidth * .75f, -bodyDepth * .5f, 0);
+
+        g3d.glTranslatef(0, 0, legHeight);
+
+        // body
+        // colorForSES(g3d, adult);
+        drawCube(g3d, bodyWidth, bodyDepth, bodyHeight);
+        // if (adult.isPregnant()) {
+        // g3d.glTranslatef(bodyWidth * 0.5f, bodyDepth * 0.5f, 0);
+        // glSetColor(g3d, ColorFeature.RED, 200);
+        // drawCylinder(g3d, bodyWidth * 1.5f, bodyHeight * .5f, true);
+        // g3d.glTranslatef(-bodyWidth * .5f, -bodyDepth * .5f, 0);
+        // }
+        g3d.glTranslatef(bodyWidth / 2.0f, bodyDepth / 2.0f, bodyHeight);
+
+        // head
+        // colorForRace(g3d, adult);
+        drawCylinder(g3d, headWidth, headHeight, true);
+
+        g3d.glTranslatef(0.0f, 0.0f, -(legHeight + bodyHeight));
+
+        g3d.glTranslatef(-.5f, -.5f, -(legHeight + bodyHeight));
+
+        g3d.glEnd();
+    }
+
+    protected void colorForStatus(Graphics3D g3d, Individual individual) {
+
+        org.eclipse.swt.graphics.Color color = null;
+        org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+        if (individual.getStatus() == StatusEnum.susceptible) {
+            color = org.eclipse.draw2d.ColorConstants.blue;
+        }
+
+        else if (individual.getStatus() == StatusEnum.exposed) {
+            color = org.eclipse.draw2d.ColorConstants.yellow;
+        }
+
+        else if (individual.getStatus() == StatusEnum.asymptomInfectious) {
+            shape.setColor(color, 255);
+        }
+
+        else if (individual.getStatus() == StatusEnum.recovered) {
+            color = org.eclipse.draw2d.ColorConstants.green;
+        }
+
+        else if (individual.getStatus() == StatusEnum.dead) {
+            color = org.eclipse.draw2d.ColorConstants.black;
+        }
+
+        else if (individual.getStatus() == StatusEnum.symptomInfectious) {
+            color = org.eclipse.draw2d.ColorConstants.red;
+        }
+        glSetColor(g3d, color, 255);
+    }
+
+    private void drawCylinder(Graphics3D g3d, float width, float height, boolean cap) {
+        drawCylinder(g3d, width, width, height, cap);
+    }
+
+    private void drawCylinder(Graphics3D g3d, float width1, float width2, float height, boolean cap) {
+        Cylinder head = new Cylinder();
+        head.setNormals(Graphics3DUtil.GLU_FLAT);
+        head.setDrawStyle(Graphics3DUtil.GLU_FILL);
+        head.draw(width1 / 2, width2 / 2, height, 30, 10);
+        g3d.glTranslatef(0, 0, height);
+        if (cap) {
+            Disk disk = new Disk();
+            disk.setNormals(Graphics3DUtil.GLU_FLAT);
+            disk.setDrawStyle(Graphics3DUtil.GLU_FILL);
+            disk.setOrientation(Graphics3DUtil.GLU_INSIDE);
+            disk.draw(width1 / 2, 0, 10, 1);
+        }
+        g3d.glTranslatef(0, 0, -height);
+    }
+
+    private void drawCube(Graphics3D g3d, float width, float depth, float height) {
+        g3d.glBegin(Graphics3DDraw.GL_QUADS);
+
+        // back
+        g3d.glNormal3f(0, 0, height);
+        g3d.glVertex3f(0, 0, height);
+        g3d.glVertex3f(width, 0, height);
+        g3d.glVertex3f(width, depth, height);
+        g3d.glVertex3f(0, depth, height);
+
+        // left
+        g3d.glNormal3f(-width, 0, 0);
+        g3d.glVertex3f(0, 0, 0);
+        g3d.glVertex3f(0, 0, height);
+        g3d.glVertex3f(0, depth, height);
+        g3d.glVertex3f(0, depth, 0);
+
+        // right
+        g3d.glNormal3f(width, 0, 0);
+        g3d.glVertex3f(width, 0, height);
+        g3d.glVertex3f(width, 0, 0);
+        g3d.glVertex3f(width, depth, 0);
+        g3d.glVertex3f(width, depth, height);
+
+        // top
+        g3d.glNormal3f(0, depth, 0);
+        g3d.glVertex3f(0, depth, height);
+        g3d.glVertex3f(width, depth, height);
+        g3d.glVertex3f(width, depth, 0);
+        g3d.glVertex3f(0, depth, 0);
+
+        // bottom
+        g3d.glNormal3f(0, -depth, 0);
+        g3d.glVertex3f(0, 0, 0);
+        g3d.glVertex3f(width, 0, 0);
+        g3d.glVertex3f(width, 0, height);
+        g3d.glVertex3f(0, 0, height);
+        g3d.glEnd();
+    }
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/src/name/milesparker/epi/Tile3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/src/name/milesparker/epi/Tile3DEditPart.java
new file mode 100644
index 0000000..0fac4ba
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/src/name/milesparker/epi/Tile3DEditPart.java
@@ -0,0 +1,21 @@
+package name.milesparker.epi;
+
+import org.ascape.util.vis.ColorFeatureConcrete;
+import org.eclipse.swt.graphics.Color;
+
+/**
+ * Neighborhood Cell Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Jun 16, 2009 4:59:03 PM PDT in project: edu.brook.parent.escape  */
+
+public class Tile3DEditPart
+extends
+org.eclipse.amp.agf3d.TileEdit3DPart {
+
+    public static final Color TILE = ColorFeatureConcrete.create(240, 210, 140);
+
+    protected void updateGraphics() {
+        getCube().setColor(TILE, 255);
+
+    }
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/CooperateDefectStyle.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/CooperateDefectStyle.java
new file mode 100644
index 0000000..159d0a4
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/CooperateDefectStyle.java
@@ -0,0 +1,62 @@
+package edu.brook;
+
+/**
+ * Cooperate Defect Style Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:50 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class CooperateDefectStyle extends org.eclipse.amp.agf.gef.AgentEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		Player playerRule = (Player) getModel();
+
+		if (playerRule.isCooperate()) {
+
+			if (!createFigure) {
+				color = org.eclipse.draw2d.ColorConstants.blue;
+
+			}
+			if (createFigure) {
+				figure = shapeOval();
+			}
+
+			if (!createFigure) {
+				figure.setBackgroundColor(color);
+				((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+			}
+
+		}
+
+		if (!(playerRule.isCooperate())) {
+
+			if (!createFigure) {
+				color = org.eclipse.draw2d.ColorConstants.red;
+
+			}
+			if (createFigure) {
+				figure = shapeOval();
+			}
+
+			if (!createFigure) {
+				figure.setBackgroundColor(color);
+				((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+			}
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/CooperateDefectStyle3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/CooperateDefectStyle3DEditPart.java
new file mode 100644
index 0000000..c101854
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/CooperateDefectStyle3DEditPart.java
@@ -0,0 +1,43 @@
+package edu.brook;
+
+/**
+ * Cooperate Defect Style Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:56 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class CooperateDefectStyle3DEditPart
+		extends
+			org.eclipse.amp.agf3d.CubeEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		for (int i = 1; i <= 4; i++) {
+			setShowMarker(i, false);
+		}
+
+		Player playerRule = (Player) getModel();
+
+		if (playerRule.isCooperate()) {
+
+			color = org.eclipse.draw2d.ColorConstants.blue;
+
+			shape = getCube();
+
+			shape.setColor(color, 255);
+
+		}
+
+		if (!(playerRule.isCooperate())) {
+
+			color = org.eclipse.draw2d.ColorConstants.red;
+
+			shape = getCube();
+
+			shape.setColor(color, 255);
+
+		}
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/CooperateDefectStyleGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/CooperateDefectStyleGraphics.java
new file mode 100644
index 0000000..4de8bd6
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/CooperateDefectStyleGraphics.java
@@ -0,0 +1,64 @@
+package edu.brook;
+
+/**
+ * Cooperate Defect Style Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:53 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class CooperateDefectStyleGraphics
+		extends
+			org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		org.ascape.model.HostCell rootActGroupCell = (org.ascape.model.HostCell) object;
+		if (rootActGroupCell.getOccupant() instanceof Player) {
+			Player rootActGroup = (Player) rootActGroupCell.getOccupant();
+			Player playerRule = rootActGroup;
+
+			if (playerRule.isCooperate()) {
+				org.eclipse.swt.graphics.Color playerRuleColorBlue = org.eclipse.draw2d.ColorConstants.blue;
+
+				g.setForegroundColor(playerRuleColorBlue);
+				g.setBackgroundColor(playerRuleColorBlue);
+				shape = shape.oval;
+				if (shape == Shapes.oval) {
+					g.fillOval(0, 0, width, height);
+				} else if (shape == Shapes.marker) {
+					int d = (int) (width * .25 - 1);
+					int d2 = (int) (width * .5 - 1);
+					g.fillOval(d, d, d2, d2);
+				} else if (shape == Shapes.rectangle) {
+					g.fillRectangle(0, 0, width, height);
+				}
+
+			}
+
+			if (!(playerRule.isCooperate())) {
+				org.eclipse.swt.graphics.Color playerRuleColorRed = org.eclipse.draw2d.ColorConstants.red;
+
+				g.setForegroundColor(playerRuleColorRed);
+				g.setBackgroundColor(playerRuleColorRed);
+				shape = shape.oval;
+				if (shape == Shapes.oval) {
+					g.fillOval(0, 0, width, height);
+				} else if (shape == Shapes.marker) {
+					int d = (int) (width * .25 - 1);
+					int d2 = (int) (width * .5 - 1);
+					g.fillOval(d, d, d2, d2);
+				} else if (shape == Shapes.rectangle) {
+					g.fillRectangle(0, 0, width, height);
+				}
+
+			}
+
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/DemographicPrisonersDilemma.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/DemographicPrisonersDilemma.java
new file mode 100644
index 0000000..8f70b33
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/DemographicPrisonersDilemma.java
@@ -0,0 +1,735 @@
+package edu.brook;
+
+/**
+ * Demographic Prisoner_s Dilemma Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:49 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class DemographicPrisonersDilemma extends org.ascape.model.Scape
+		implements
+			org.eclipse.amp.agf.gef.ModelFactoryProvider {
+
+	/**
+	 * The number of players to create.
+	 */
+
+	private int playerCount = 100;
+	/**
+	 * 
+	 */
+
+	private int minimumWealth = 20;
+	/**
+	 * 
+	 */
+
+	private int maximumWealth = 100;
+	/**
+	 * 
+	 */
+
+	private int maximumAge = 100;
+	/**
+	 * The change in wealth for a player when playing cooperate against cooperate.
+	 */
+
+	private int payoffCC = 2;
+	/**
+	 * The change in wealth for a player when playing cooperate against defect.
+	 */
+
+	private int payoffCD = -6;
+	/**
+	 * The change in wealth for a player when playing defect against cooperate.
+	 */
+
+	private int payoffDC = 6;
+	/**
+	 * The change in wealth for a player when both players defect.
+	 */
+
+	private int payoffDD = -5;
+	/**
+	 * The wealth level at which an agent can fission.
+	 */
+
+	private int fissionWealth = 11;
+	/**
+	 * The wealth that is passed from parent to child.
+	 */
+
+	private int inheiritedWealth = 6;
+	/**
+	 * The wealth initially assigned to an agent at the beginning of model run.
+	 */
+
+	private int initialWealth = 6;
+	/**
+	 * The probabaility that a given agent will change strategies in a given period, expressed as a value from 0.0 to 1.0.
+	 */
+
+	private double mutationRate = .1;
+	/**
+	 * The number of periods before an agent will be removed from game when Die At Age rule is active.
+	 */
+
+	private int deathAge = 100;
+	/**
+	 * The actual age in years as determined by data set.
+	 */
+
+	private int birthAge = 0;
+	/**
+	 * The size of each dimension.
+	 */
+
+	private int[] gameSpaceDimensions = new int[2];
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape gameSpace = null;
+	/**
+	 * Constructs a new Demographic Prisoner_s Dilemma.
+	 */
+
+	public DemographicPrisonersDilemma() {
+		createUniqueID();
+		setGameSpaceWidth(20);
+		setGameSpaceHeight(20);
+	}
+
+	org.eclipse.gef.EditPartFactory factory;
+
+	org.eclipse.gef.EditPartFactory treeFactory;
+
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			DemographicPrisonersDilemma clone = (DemographicPrisonersDilemma) super
+					.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape playerList = null;
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape playCellList = null;
+
+	/**
+	 * Gets the Player property for Demographic Prisoner_s Dilemma.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getPlayer() {
+		return playerList;
+	}
+
+	/**
+	 * Sets the Player property for Demographic Prisoner_s Dilemma.
+	 * 
+	 * @param _player the new Player value
+	 */
+
+	public void setPlayer(org.ascape.model.Scape _player) {
+		playerList = _player;
+	}
+	/**
+	 * Gets the Play Cell property for Demographic Prisoner_s Dilemma.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getPlayCell() {
+		return playCellList;
+	}
+
+	/**
+	 * Sets the Play Cell property for Demographic Prisoner_s Dilemma.
+	 * 
+	 * @param _playCell the new Play Cell value
+	 */
+
+	public void setPlayCell(org.ascape.model.Scape _playCell) {
+		playCellList = _playCell;
+	}
+
+	/**
+	 * Creates the members of Demographic Prisoner_s Dilemma. 
+	 */
+	public void createScape() {
+		super.createScape();
+		setName(toString());
+
+		Player playerProto = new Player();
+		playerList = new org.ascape.model.Scape();
+		playerList.setName("Player");
+		playerList.setPrototypeAgent(playerProto);
+		playerList.setExecutionOrder(org.ascape.model.Scape.RULE_ORDER);
+
+		gameSpace = new org.ascape.model.Scape(
+				new org.ascape.model.space.Array2DVonNeumann());
+		gameSpace.setPrototypeAgent(new PlayCell());
+		gameSpace.setExtent(new org.ascape.model.space.Coordinate2DDiscrete(
+				getGameSpaceDimensions()));
+		gameSpace.setName("Build Grid");
+		((org.ascape.model.space.CollectionSpace) gameSpace.getSpace())
+				.setPeriodic(true);
+		add(gameSpace);
+		org.ascape.model.Scape playCellList = gameSpace;
+
+		add(playerList);
+
+		playerProto.setHostScape(gameSpace);
+		gameSpace.getRules().clear();
+
+		playerList.addStatCollector(new org.ascape.util.data.StatCollectorCSA(
+				"Player Population") {
+			private static final long serialVersionUID = 684614444640209893L;
+
+			@SuppressWarnings("unused")
+			public final boolean meetsCondition(Object object) {
+				return true;
+			}
+		});
+
+		playerList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCondCSAMM(
+						"Player is Cooperate") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final boolean meetsCondition(Object player) {
+						return ((Player) player).isCooperate();
+					}
+				});
+		playerList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCondCSAMM(
+						"Player is not Cooperate") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final boolean meetsCondition(Object player) {
+						return !((Player) player).isCooperate();
+					}
+				});
+
+		playerList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCSAMM(
+						"Player Age") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final double getValue(Object player) {
+						return ((Player) player).getAge();
+					}
+				});
+
+		playerList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCSAMM(
+						"Player Wealth") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final double getValue(Object player) {
+						return ((Player) player).getWealth();
+					}
+				});
+
+		playerList.addInitialRule(new org.ascape.model.rule.Rule("Initialize") {
+			private static final long serialVersionUID = 6846144446402098982L;
+			public void execute(org.ascape.model.Agent a) {
+				((edu.brook.Player) a).intializeNonFramework();
+			}
+		});
+
+		playerList.addInitialRule(new org.ascape.model.rule.Rule(
+				"Move To Random Location") {
+			private static final long serialVersionUID = 6846144446402098982L;
+			public void execute(org.ascape.model.Agent a) {
+				((edu.brook.Player) a).moveToRandomLocation();
+			}
+		});
+		playerList.addRule(new org.ascape.model.rule.Rule("Random Walk") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((edu.brook.Player) a).randomWalk();
+			}
+		});
+		playerList.addRule(new org.ascape.model.rule.Rule("Play Neighbor") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((edu.brook.Player) a).playNeighbor();
+			}
+		});
+		playerList.addRule(new org.ascape.model.rule.Rule("Update Age") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((edu.brook.Player) a).updateAge();
+			}
+		});
+		playerList.addRule(new org.ascape.model.rule.Rule("Fission Rule") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((edu.brook.Player) a).fissionRule();
+			}
+		});
+		playerList.addRule(new org.ascape.model.rule.Rule("Die At Age") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((edu.brook.Player) a).dieAtAge();
+			}
+		});
+		playerList.addRule(new org.ascape.model.rule.Rule("Die At Wealth 0") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((edu.brook.Player) a).dieAtWealth0();
+			}
+		});
+
+	}
+
+	/**
+	 * Creates UI views for Demographic Prisoner_s Dilemma.
+	 */
+	public void createGraphicViews() {
+		super.createGraphicViews();
+		org.ascape.view.vis.ChartView chart = new org.ascape.view.vis.ChartView();
+		org.eclipse.draw2d.Graphics dummyGraphics = new org.eclipse.draw2d.SWTGraphics(
+				new org.eclipse.swt.graphics.GC(
+						new org.eclipse.swt.graphics.Image(
+								org.eclipse.ui.PlatformUI.getWorkbench()
+										.getDisplay(), 10, 10)));
+
+		org.ascape.model.Scape playerScape = new DemographicPrisonersDilemma();
+		playerScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Player player = new Player() {
+			public void requestUpdate() {
+			}
+		};
+		playerScape.add(player);
+
+		org.ascape.model.HostCell playerHost = new org.ascape.model.HostCell() {
+			public void requestUpdate() {
+			}
+		};
+		playerHost.setOccupant((org.ascape.model.CellOccupant) player);
+		org.eclipse.swt.graphics.Color playerLastColor = dummyGraphics
+				.getForegroundColor();
+		org.eclipse.swt.graphics.Color playerNewColor = dummyGraphics
+				.getForegroundColor();
+
+		CooperateDefectStyleGraphics cooperateDefectStyle = new CooperateDefectStyleGraphics();
+
+		player.setCooperate(true);
+		cooperateDefectStyle.draw(dummyGraphics, playerHost, 4, 4);
+		playerNewColor = dummyGraphics.getForegroundColor();
+		if (playerNewColor == playerLastColor) {
+			playerNewColor = org.ascape.util.vis.ColorFeatureConcrete
+					.createHSB((float) java.lang.Math.random() * 360f, 1.0f,
+							0.8f);
+		} else {
+			playerLastColor = playerNewColor;
+		}
+		chart.addSeries("Count Player is Cooperate", playerNewColor);
+
+		player.setCooperate(false);
+		cooperateDefectStyle.draw(dummyGraphics, playerHost, 4, 4);
+		playerNewColor = dummyGraphics.getForegroundColor();
+		if (playerNewColor == playerLastColor) {
+			playerNewColor = org.ascape.util.vis.ColorFeatureConcrete
+					.createHSB((float) java.lang.Math.random() * 360f, 1.0f,
+							0.8f);
+		} else {
+			playerLastColor = playerNewColor;
+		}
+		chart.addSeries("Count Player is not Cooperate", playerNewColor);
+
+		org.ascape.model.Scape playCellScape = new DemographicPrisonersDilemma();
+		playCellScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		PlayCell playCell = new PlayCell() {
+			public void requestUpdate() {
+			}
+		};
+		playCellScape.add(playCell);
+
+		PlayCellStyleGraphics playCellStyle2D = new PlayCellStyleGraphics();
+
+		addView(chart);
+		addView(new org.ascape.view.vis.GEFView());
+	}
+
+	public void scapeSetup(org.ascape.model.event.ScapeEvent scapeEvent) {
+		//Set the size of the scape populations, e.g. for mutable scapes that need to have their size reset
+
+		playerList.setSize(playerCount);
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartFactory() {
+		if (factory == null) {
+			factory = new DemographicPrisonersDilemmaPartFactory();
+		}
+		return factory;
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartTreeFactory() {
+		if (treeFactory == null) {
+			treeFactory = new org.eclipse.amp.escape.ascape.adapt.AscapePartTreeFactory();
+		}
+		return treeFactory;
+	}
+
+	public static void main(String[] args) {
+		(new org.ascape.runtime.NonGraphicRunner())
+				.openInstance("edu.brook.DemographicPrisonersDilemma");
+	}
+
+	/**
+	 * Gets the Player Count property for Demographic Prisoner_s Dilemma.
+	 * @return The number of players to create.
+	 */
+
+	public int getPlayerCount() {
+		return playerCount;
+	}
+
+	/**
+	 * Sets the Player Count property for Demographic Prisoner_s Dilemma.
+	 * The number of players to create.
+	 * @param _playerCount the new Player Count value
+	 */
+
+	public void setPlayerCount(int _playerCount) {
+		playerCount = _playerCount;
+	}
+	/**
+	 * Gets the Minimum Wealth property for Demographic Prisoner_s Dilemma.
+	 * @return 
+	 */
+
+	public int getMinimumWealth() {
+		return minimumWealth;
+	}
+
+	/**
+	 * Sets the Minimum Wealth property for Demographic Prisoner_s Dilemma.
+	 * 
+	 * @param _minimumWealth the new Minimum Wealth value
+	 */
+
+	public void setMinimumWealth(int _minimumWealth) {
+		minimumWealth = _minimumWealth;
+	}
+	/**
+	 * Gets the Maximum Wealth property for Demographic Prisoner_s Dilemma.
+	 * @return 
+	 */
+
+	public int getMaximumWealth() {
+		return maximumWealth;
+	}
+
+	/**
+	 * Sets the Maximum Wealth property for Demographic Prisoner_s Dilemma.
+	 * 
+	 * @param _maximumWealth the new Maximum Wealth value
+	 */
+
+	public void setMaximumWealth(int _maximumWealth) {
+		maximumWealth = _maximumWealth;
+	}
+	/**
+	 * Gets the Maximum Age property for Demographic Prisoner_s Dilemma.
+	 * @return 
+	 */
+
+	public int getMaximumAge() {
+		return maximumAge;
+	}
+
+	/**
+	 * Sets the Maximum Age property for Demographic Prisoner_s Dilemma.
+	 * 
+	 * @param _maximumAge the new Maximum Age value
+	 */
+
+	public void setMaximumAge(int _maximumAge) {
+		maximumAge = _maximumAge;
+	}
+	/**
+	 * Gets the Payoff Cooperate Cooperate property for Demographic Prisoner_s Dilemma.
+	 * @return The change in wealth for a player when playing cooperate against cooperate.
+	 */
+
+	public int getPayoffCC() {
+		return payoffCC;
+	}
+
+	/**
+	 * Sets the Payoff Cooperate Cooperate property for Demographic Prisoner_s Dilemma.
+	 * The change in wealth for a player when playing cooperate against cooperate.
+	 * @param _payoffCC the new Payoff Cooperate Cooperate value
+	 */
+
+	public void setPayoffCC(int _payoffCC) {
+		payoffCC = _payoffCC;
+	}
+	/**
+	 * Gets the Payoff Cooperate Defect property for Demographic Prisoner_s Dilemma.
+	 * @return The change in wealth for a player when playing cooperate against defect.
+	 */
+
+	public int getPayoffCD() {
+		return payoffCD;
+	}
+
+	/**
+	 * Sets the Payoff Cooperate Defect property for Demographic Prisoner_s Dilemma.
+	 * The change in wealth for a player when playing cooperate against defect.
+	 * @param _payoffCD the new Payoff Cooperate Defect value
+	 */
+
+	public void setPayoffCD(int _payoffCD) {
+		payoffCD = _payoffCD;
+	}
+	/**
+	 * Gets the Payoff Defect Cooperate property for Demographic Prisoner_s Dilemma.
+	 * @return The change in wealth for a player when playing defect against cooperate.
+	 */
+
+	public int getPayoffDC() {
+		return payoffDC;
+	}
+
+	/**
+	 * Sets the Payoff Defect Cooperate property for Demographic Prisoner_s Dilemma.
+	 * The change in wealth for a player when playing defect against cooperate.
+	 * @param _payoffDC the new Payoff Defect Cooperate value
+	 */
+
+	public void setPayoffDC(int _payoffDC) {
+		payoffDC = _payoffDC;
+	}
+	/**
+	 * Gets the Payoff Defect Defect property for Demographic Prisoner_s Dilemma.
+	 * @return The change in wealth for a player when both players defect.
+	 */
+
+	public int getPayoffDD() {
+		return payoffDD;
+	}
+
+	/**
+	 * Sets the Payoff Defect Defect property for Demographic Prisoner_s Dilemma.
+	 * The change in wealth for a player when both players defect.
+	 * @param _payoffDD the new Payoff Defect Defect value
+	 */
+
+	public void setPayoffDD(int _payoffDD) {
+		payoffDD = _payoffDD;
+	}
+	/**
+	 * Gets the Fission Wealth property for Demographic Prisoner_s Dilemma.
+	 * @return The wealth level at which an agent can fission.
+	 */
+
+	public int getFissionWealth() {
+		return fissionWealth;
+	}
+
+	/**
+	 * Sets the Fission Wealth property for Demographic Prisoner_s Dilemma.
+	 * The wealth level at which an agent can fission.
+	 * @param _fissionWealth the new Fission Wealth value
+	 */
+
+	public void setFissionWealth(int _fissionWealth) {
+		fissionWealth = _fissionWealth;
+	}
+	/**
+	 * Gets the Inheirited Wealth property for Demographic Prisoner_s Dilemma.
+	 * @return The wealth that is passed from parent to child.
+	 */
+
+	public int getInheiritedWealth() {
+		return inheiritedWealth;
+	}
+
+	/**
+	 * Sets the Inheirited Wealth property for Demographic Prisoner_s Dilemma.
+	 * The wealth that is passed from parent to child.
+	 * @param _inheiritedWealth the new Inheirited Wealth value
+	 */
+
+	public void setInheiritedWealth(int _inheiritedWealth) {
+		inheiritedWealth = _inheiritedWealth;
+	}
+	/**
+	 * Gets the Initial Wealth property for Demographic Prisoner_s Dilemma.
+	 * @return The wealth initially assigned to an agent at the beginning of model run.
+	 */
+
+	public int getInitialWealth() {
+		return initialWealth;
+	}
+
+	/**
+	 * Sets the Initial Wealth property for Demographic Prisoner_s Dilemma.
+	 * The wealth initially assigned to an agent at the beginning of model run.
+	 * @param _initialWealth the new Initial Wealth value
+	 */
+
+	public void setInitialWealth(int _initialWealth) {
+		initialWealth = _initialWealth;
+	}
+	/**
+	 * Gets the Mutation Rate property for Demographic Prisoner_s Dilemma.
+	 * @return The probabaility that a given agent will change strategies in a given period, expressed as a value from 0.0 to 1.0.
+	 */
+
+	public double getMutationRate() {
+		return mutationRate;
+	}
+
+	/**
+	 * Sets the Mutation Rate property for Demographic Prisoner_s Dilemma.
+	 * The probabaility that a given agent will change strategies in a given period, expressed as a value from 0.0 to 1.0.
+	 * @param _mutationRate the new Mutation Rate value
+	 */
+
+	public void setMutationRate(double _mutationRate) {
+		mutationRate = _mutationRate;
+	}
+	/**
+	 * Gets the Death Age property for Demographic Prisoner_s Dilemma.
+	 * @return The number of periods before an agent will be removed from game when Die At Age rule is active.
+	 */
+
+	public int getDeathAge() {
+		return deathAge;
+	}
+
+	/**
+	 * Sets the Death Age property for Demographic Prisoner_s Dilemma.
+	 * The number of periods before an agent will be removed from game when Die At Age rule is active.
+	 * @param _deathAge the new Death Age value
+	 */
+
+	public void setDeathAge(int _deathAge) {
+		deathAge = _deathAge;
+	}
+	/**
+	 * Gets the Birth Age property for Demographic Prisoner_s Dilemma.
+	 * @return The actual age in years as determined by data set.
+	 */
+
+	public int getBirthAge() {
+		return birthAge;
+	}
+
+	/**
+	 * Sets the Birth Age property for Demographic Prisoner_s Dilemma.
+	 * The actual age in years as determined by data set.
+	 * @param _birthAge the new Birth Age value
+	 */
+
+	public void setBirthAge(int _birthAge) {
+		birthAge = _birthAge;
+	}
+	/**
+	 * Gets the Dimensions property for Game Space.
+	 * @return The size of each dimension.
+	 */
+
+	public int[] getGameSpaceDimensions() {
+		return gameSpaceDimensions;
+	}
+
+	/**
+	 * Sets the Dimensions property for Game Space.
+	 * The size of each dimension.
+	 * @param _gameSpaceDimensions the new Dimensions value
+	 */
+
+	public void setGameSpaceDimensions(int[] _gameSpaceDimensions) {
+		gameSpaceDimensions = _gameSpaceDimensions;
+	}
+	/**
+	 * Gets the Width property for Game Space.
+	 * @return The horizontal extent of the space.
+	 */
+
+	public int getGameSpaceWidth() {
+		return gameSpaceDimensions[0];
+	}
+
+	/**
+	 * Sets the Width property for Game Space.
+	 * The horizontal extent of the space.
+	 * @param _gameSpaceWidth the new Width value
+	 */
+
+	public void setGameSpaceWidth(int _gameSpaceWidth) {
+		gameSpaceDimensions[0] = _gameSpaceWidth;
+	}
+	/**
+	 * Gets the Height property for Game Space.
+	 * @return The vertical extent of the space.
+	 */
+
+	public int getGameSpaceHeight() {
+		return gameSpaceDimensions[1];
+	}
+
+	/**
+	 * Sets the Height property for Game Space.
+	 * The vertical extent of the space.
+	 * @param _gameSpaceHeight the new Height value
+	 */
+
+	public void setGameSpaceHeight(int _gameSpaceHeight) {
+		gameSpaceDimensions[1] = _gameSpaceHeight;
+	}
+	/**
+	 * Gets the Game Space property for Demographic Prisoner_s Dilemma.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getGameSpace() {
+		return gameSpace;
+	}
+
+	/**
+	 * Sets the Game Space property for Demographic Prisoner_s Dilemma.
+	 * 
+	 * @param _gameSpace the new Game Space value
+	 */
+
+	public void setGameSpace(org.ascape.model.Scape _gameSpace) {
+		gameSpace = _gameSpace;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Demographic Prisoner_s Dilemma " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/DemographicPrisonersDilemmaPartFactory.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/DemographicPrisonersDilemmaPartFactory.java
new file mode 100644
index 0000000..a442638
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/DemographicPrisonersDilemmaPartFactory.java
@@ -0,0 +1,18 @@
+package edu.brook;
+public class DemographicPrisonersDilemmaPartFactory
+		extends
+			org.eclipse.amp.escape.ascape.adapt.AscapePartFactory {
+
+	protected org.eclipse.gef.EditPart getPartForElement(Object model) {
+
+		if (model instanceof Player) {
+			return new edu.brook.CooperateDefectStyle();
+		}
+
+		if (model instanceof PlayCell) {
+			return new edu.brook.PlayCellStyle();
+		}
+
+		return super.getPartForElement(model);
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCell.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCell.java
new file mode 100644
index 0000000..430c55f
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCell.java
@@ -0,0 +1,54 @@
+package edu.brook;
+
+/**
+ * Play Cell Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:50 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class PlayCell extends org.ascape.model.HostCell {
+
+	/**
+	 * Constructs a new Play Cell.
+	 */
+
+	public PlayCell() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			PlayCell clone = (PlayCell) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public DemographicPrisonersDilemma getDemographicPrisoner_sDilemma() {
+		return (DemographicPrisonersDilemma) getScape().getRoot();
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Play Cell " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCellStyle.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCellStyle.java
new file mode 100644
index 0000000..3356d84
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCellStyle.java
@@ -0,0 +1,42 @@
+package edu.brook;
+
+/**
+ * Play Cell Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:50 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class PlayCellStyle
+		extends
+			org.eclipse.amp.escape.ascape.gef.HostCellEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		PlayCell playCellRule = (PlayCell) getModel();
+
+		if (!createFigure) {
+			color = org.eclipse.draw2d.ColorConstants.green;
+
+		}
+		if (createFigure) {
+			figure = shapeRectangle();
+		}
+
+		if (!createFigure) {
+			figure.setBackgroundColor(color);
+			((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCellStyle3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCellStyle3DEditPart.java
new file mode 100644
index 0000000..1f6589a
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCellStyle3DEditPart.java
@@ -0,0 +1,25 @@
+package edu.brook;
+
+/**
+ * Play Cell Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:56 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class PlayCellStyle3DEditPart
+		extends
+			org.eclipse.amp.agf3d.TileEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		PlayCell playCellRule = (PlayCell) getModel();
+
+		color = org.eclipse.draw2d.ColorConstants.green;
+
+		shape = getCube();
+
+		shape.setColor(color, 255);
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCellStyleGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCellStyleGraphics.java
new file mode 100644
index 0000000..cc61225
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/PlayCellStyleGraphics.java
@@ -0,0 +1,38 @@
+package edu.brook;
+
+/**
+ * Play Cell Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:53 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class PlayCellStyleGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		PlayCell rootActGroup = (PlayCell) object;
+		PlayCell playCellRule = rootActGroup;
+
+		org.eclipse.swt.graphics.Color playCellRuleColorGreen = org.eclipse.draw2d.ColorConstants.green;
+
+		g.setForegroundColor(playCellRuleColorGreen);
+		g.setBackgroundColor(playCellRuleColorGreen);
+		shape = shape.rectangle;
+		if (shape == Shapes.oval) {
+			g.fillOval(0, 0, width, height);
+		} else if (shape == Shapes.marker) {
+			int d = (int) (width * .25 - 1);
+			int d2 = (int) (width * .5 - 1);
+			g.fillOval(d, d, d2, d2);
+		} else if (shape == Shapes.rectangle) {
+			g.fillRectangle(0, 0, width, height);
+		}
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/Player.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/Player.java
new file mode 100644
index 0000000..c655f3c
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/edu/brook/Player.java
@@ -0,0 +1,372 @@
+package edu.brook;
+
+/**
+ * Player Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:49 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Player extends org.ascape.model.CellOccupant {
+
+	/**
+	 * 
+	 */
+
+	private boolean cooperate = false;
+	/**
+	 * 
+	 */
+
+	private int age = 0;
+	/**
+	 * 
+	 */
+
+	private int wealth = 0;
+	/**
+	 * Constructs a new Player.
+	 */
+
+	public Player() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Player clone = (Player) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public DemographicPrisonersDilemma getDemographicPrisoner_sDilemma() {
+		return (DemographicPrisonersDilemma) getScape().getRoot();
+	}
+
+	/**
+	 * .
+	 */
+
+	public void intializeNonFramework() {
+
+		setWealth(getDemographicPrisoner_sDilemma().getInitialWealth());
+		int randomToMaxAge = randomToLimit(getDemographicPrisoner_sDilemma()
+				.getMaximumAge());
+
+		boolean randomStrategy = getRandom().nextBoolean();
+
+		setAge(randomToMaxAge);
+
+		setCooperate(randomStrategy);
+
+	}
+	/**
+	 * .
+	 */
+
+	public void moveToRandomLocation() {
+
+		{
+
+			PlayCell randomCell2 = (PlayCell) ((org.ascape.model.space.Discrete) getDemographicPrisoner_sDilemma()
+					.getGameSpace().getSpace()).findRandomAvailable();
+			if (randomCell2 != null) {
+
+				moveTo(randomCell2);
+
+			}
+
+		}
+
+	}
+
+	/**
+	 * .
+	 */
+
+	public void randomWalk() {
+
+		{
+
+			PlayCell randomNeighbor = (PlayCell) ((org.ascape.model.space.Discrete) getDemographicPrisoner_sDilemma()
+					.getGameSpace().getSpace())
+					.findRandomAvailableNeighbor(((org.ascape.model.CellOccupant) this)
+							.getHostCell());
+			if (randomNeighbor != null) {
+
+				moveTo(randomNeighbor);
+
+			}
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void playNeighbor() {
+
+		{
+			org.ascape.util.Conditional otherPlayerCondition = new org.ascape.util.Conditional() {
+				private static final long serialVersionUID = 6846144446402098985L;
+
+				public boolean meetsCondition(Object otherPlayerCell) {
+					if (otherPlayerCell instanceof Player) {
+						Player otherPlayer = (Player) otherPlayerCell;
+						return true;
+					} else {
+						return false;
+					}
+				}
+			};
+
+			Player otherPlayer = (Player) ((org.ascape.model.space.Discrete) getDemographicPrisoner_sDilemma()
+					.getGameSpace().getSpace()).findRandomNeighbor(this,
+					otherPlayerCondition);
+			if (otherPlayer != null) {
+
+				if ((otherPlayer.isCooperate() && isCooperate())) {
+
+					int valueWealthAddPayoffCooperateCooperate = getWealth()
+							+ getDemographicPrisoner_sDilemma().getPayoffCC();
+
+					int valueWealthAddPayoffCooperateCooperateCopy = otherPlayer
+							.getWealth()
+							+ otherPlayer.getDemographicPrisoner_sDilemma()
+									.getPayoffCC();
+
+					setWealth(valueWealthAddPayoffCooperateCooperate);
+
+					otherPlayer
+							.setWealth(valueWealthAddPayoffCooperateCooperateCopy);
+
+				}
+
+				if ((otherPlayer.isCooperate() && !isCooperate())) {
+
+					int valueWealthAddPayoffDefectCooperate = getWealth()
+							+ getDemographicPrisoner_sDilemma().getPayoffDC();
+
+					int valueWealthAddPayoffCooperateDefectCopy = otherPlayer
+							.getWealth()
+							+ otherPlayer.getDemographicPrisoner_sDilemma()
+									.getPayoffCD();
+
+					setWealth(valueWealthAddPayoffDefectCooperate);
+
+					otherPlayer
+							.setWealth(valueWealthAddPayoffCooperateDefectCopy);
+
+				}
+
+				if ((!otherPlayer.isCooperate() && isCooperate())) {
+
+					int valueWealthAddPayoffCooperateDefect = getWealth()
+							+ getDemographicPrisoner_sDilemma().getPayoffCD();
+
+					int valueWealthAddPayoffDefectCooperateCopy = otherPlayer
+							.getWealth()
+							+ otherPlayer.getDemographicPrisoner_sDilemma()
+									.getPayoffDC();
+
+					setWealth(valueWealthAddPayoffCooperateDefect);
+
+					otherPlayer
+							.setWealth(valueWealthAddPayoffDefectCooperateCopy);
+
+				}
+
+				if ((!isCooperate() && !otherPlayer.isCooperate())) {
+
+					int valueWealthAddPayoffDefectDefect = getWealth()
+							+ getDemographicPrisoner_sDilemma().getPayoffDD();
+
+					int valueWealthAddPayoffDefectDefectCopy = otherPlayer
+							.getWealth()
+							+ otherPlayer.getDemographicPrisoner_sDilemma()
+									.getPayoffDD();
+
+					setWealth(valueWealthAddPayoffDefectDefect);
+
+					otherPlayer.setWealth(valueWealthAddPayoffDefectDefectCopy);
+
+				}
+
+			}
+
+		}
+
+	}
+	/**
+	 * Increment the Age by One..
+	 */
+
+	public void updateAge() {
+
+		int incrementAge = getAge() + 1;
+
+		setAge(incrementAge);
+
+	}
+
+	/**
+	 * .
+	 */
+
+	public void fissionRule() {
+
+		if (getWealth() >= getDemographicPrisoner_sDilemma().getFissionWealth()) {
+
+			{
+
+				PlayCell birthLocation = (PlayCell) ((org.ascape.model.space.Discrete) getDemographicPrisoner_sDilemma()
+						.getGameSpace().getSpace())
+						.findRandomAvailableNeighbor(((org.ascape.model.CellOccupant) this)
+								.getHostCell());
+				if (birthLocation != null) {
+
+					Player createAgents = (Player) getDemographicPrisoner_sDilemma()
+							.getPlayer().getSpace().newLocation(false);
+					createAgents.moveTo(birthLocation);
+					createAgents.setWealth(getDemographicPrisoner_sDilemma()
+							.getInheiritedWealth());
+					double valueRandomUnit = getRandom().nextDouble();
+
+					int wealthChildWealth = getWealth()
+							- createAgents.getDemographicPrisoner_sDilemma()
+									.getInheiritedWealth();
+
+					if (valueRandomUnit < createAgents
+							.getDemographicPrisoner_sDilemma()
+							.getMutationRate()) {
+
+						boolean valueRandomBoolean = getRandom().nextBoolean();
+
+						createAgents.setCooperate(valueRandomBoolean);
+
+					}
+
+					if (!(valueRandomUnit < createAgents
+							.getDemographicPrisoner_sDilemma()
+							.getMutationRate())) {
+
+						createAgents.setCooperate(isCooperate());
+
+					}
+
+					setWealth(wealthChildWealth);
+
+				}
+
+			}
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void dieAtAge() {
+
+		if (getAge() > getDemographicPrisoner_sDilemma().getDeathAge()) {
+
+			die();
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void dieAtWealth0() {
+
+		if (getWealth() < 0) {
+
+			die();
+
+		}
+
+	}
+
+	/**
+	 * Gets the Cooperate property for Player.
+	 * @return 
+	 */
+
+	public boolean isCooperate() {
+		return cooperate;
+	}
+
+	/**
+	 * Sets the Cooperate property for Player.
+	 * 
+	 * @param _cooperate the new Cooperate value
+	 */
+
+	public void setCooperate(boolean _cooperate) {
+		cooperate = _cooperate;
+	}
+	/**
+	 * Gets the Age property for Player.
+	 * @return 
+	 */
+
+	public int getAge() {
+		return age;
+	}
+
+	/**
+	 * Sets the Age property for Player.
+	 * 
+	 * @param _age the new Age value
+	 */
+
+	public void setAge(int _age) {
+		age = _age;
+	}
+	/**
+	 * Gets the Wealth property for Player.
+	 * @return 
+	 */
+
+	public int getWealth() {
+		return wealth;
+	}
+
+	/**
+	 * Sets the Wealth property for Player.
+	 * 
+	 * @param _wealth the new Wealth value
+	 */
+
+	public void setWealth(int _wealth) {
+		wealth = _wealth;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Player " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/Epidemic.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/Epidemic.java
new file mode 100644
index 0000000..c114ced
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/Epidemic.java
@@ -0,0 +1,800 @@
+package name.milesparker.epi;
+
+/**
+ * Epidemic Java Implementation.
+ * A simple model of epidemic dynamics. We define individual agents with different disease states. The progression of disease moves from succeptible to exposed to infectious (either symptomatic or asymptomatic) to some outcome state. Agents can transmit infection to their immediate neighbors.
+
+ For some background on the general approach, see Joshua M. Epstein. "Generative Social Science". 2006. Princeton. 
+
+ Copyright 2009, Miles Parker. Released under Eclipse Public License. All uses should be attributed.
+ * Generated by metaabm system: Sep 3, 2009 3:31:48 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Epidemic extends org.ascape.model.Scape
+		implements
+			org.eclipse.amp.agf.gef.ModelFactoryProvider {
+
+	/**
+	 * The number of individuals to create.
+	 */
+
+	private int individualCount = 250;
+	/**
+	 * The probability that any given individual will be infected at the beginning of the model run. For example, if this value is .15, and their are 100 individuals in the model, roughly 15 of those individuals will be infected at time 0.
+	 */
+
+	private double initialInfectionProbability = .05;
+	/**
+	 * The minimum probability that proximity to a single neighbor for a single period will result in transmission of infection. At the start of each model run, each individual is assigned a contact transmission probability between the minimum and maximum value. For example, if this value was .08 and the maximum value was 0.12 a given individual could have any value between those two, but the average transmission probability would be around .1. If minium and maximum values are the same, then all individuals will have the same chance of passing along infection to a given neighbor. This value must be between 0.0 and 1.0 and less than or equal to Max Contact transmission Probability.
+	 */
+
+	private double minContactTransmissionProbability = .08;
+	/**
+	 * The maximum probability that proximity to a single neighbor for a single period will result in transmission of infection. See Min Contact Probability for more information. Must be a value between 0.0 and 1.0 and greater or equal to Min Contact Transmission Probability.
+	 */
+
+	private double maxContactTransmissionProbability = .16;
+	/**
+	 * The current probability that death will occur for a given individual as a result of infection. Some number between 0.0 and 1.0.
+	 */
+
+	private double caseMortalityRate = .05;
+	/**
+	 * 
+	 */
+
+	private int periodsperDay = 24;
+	/**
+	 * The minimum amount of time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater.
+	 */
+
+	private int minPeriodExposure = 15;
+	/**
+	 * Maximum time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater.
+	 */
+
+	private int maxPeriodExposure = 24;
+	/**
+	 * Maximum time spent infected without showing symptoms. 0 or greater.
+	 */
+
+	private int minPeriodAsymptomInfection = 24;
+	/**
+	 * Maximum time spent infected without showing symptoms. May be zero!
+	 */
+
+	private int maxPeriodAsymptomInfection = 48;
+	/**
+	 * Minimum time spent infected with obvious symptoms. 0 or greater.
+	 */
+
+	private int minPeriodSymptomInfection = 24;
+	/**
+	 * Maximum time spent infected with obvious symptoms. 1 or greater.
+	 */
+
+	private int maxPeriodSymptomInfection = 168;
+	/**
+	 * The chance that an agent will move within a given period. May be any value between 0.0 and 1.0.
+	 */
+
+	private double movementProbability = .5;
+	/**
+	 * The size of each dimension.
+	 */
+
+	private int[] cityDimensions = new int[2];
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape city = null;
+	/**
+	 * Constructs a new Epidemic.
+	 */
+
+	public Epidemic() {
+		createUniqueID();
+		setCityWidth(40);
+		setCityHeight(100);
+	}
+
+	org.eclipse.gef.EditPartFactory factory;
+
+	org.eclipse.gef.EditPartFactory treeFactory;
+
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Epidemic clone = (Epidemic) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape individualList = null;
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape locationList = null;
+
+	/**
+	 * Gets the Individual property for Epidemic.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getIndividual() {
+		return individualList;
+	}
+
+	/**
+	 * Sets the Individual property for Epidemic.
+	 * 
+	 * @param _individual the new Individual value
+	 */
+
+	public void setIndividual(org.ascape.model.Scape _individual) {
+		individualList = _individual;
+	}
+	/**
+	 * Gets the Location property for Epidemic.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getLocation() {
+		return locationList;
+	}
+
+	/**
+	 * Sets the Location property for Epidemic.
+	 * 
+	 * @param _location the new Location value
+	 */
+
+	public void setLocation(org.ascape.model.Scape _location) {
+		locationList = _location;
+	}
+
+	/**
+	 * Creates the members of Epidemic. 
+	 */
+	public void createScape() {
+		super.createScape();
+		setName(toString());
+
+		Individual individualProto = new Individual();
+		individualList = new org.ascape.model.Scape();
+		individualList.setName("Individual");
+		individualList.setPrototypeAgent(individualProto);
+		individualList.setExecutionOrder(org.ascape.model.Scape.RULE_ORDER);
+
+		city = new org.ascape.model.Scape(
+				new org.ascape.model.space.Array2DEuclidian());
+		city.setPrototypeAgent(new Location());
+		city.setExtent(new org.ascape.model.space.Coordinate2DDiscrete(
+				getCityDimensions()));
+		city.setName("Build City");
+		((org.ascape.model.space.CollectionSpace) city.getSpace())
+				.setPeriodic(true);
+		add(city);
+		org.ascape.model.Scape locationList = city;
+
+		add(individualList);
+
+		individualProto.setHostScape(city);
+		city.getRules().clear();
+
+		individualList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCSA(
+						"Individual Population") {
+					private static final long serialVersionUID = 684614444640209893L;
+
+					@SuppressWarnings("unused")
+					public final boolean meetsCondition(Object object) {
+						return true;
+					}
+				});
+		individualList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCondCSAMM(
+						"Individual Susceptible Status") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final boolean meetsCondition(Object individual) {
+						return StatusEnum.susceptible == ((Individual) individual)
+								.getStatus();
+					}
+				});
+		individualList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCondCSAMM(
+						"Individual Exposed Status") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final boolean meetsCondition(Object individual) {
+						return StatusEnum.exposed == ((Individual) individual)
+								.getStatus();
+					}
+				});
+		individualList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCondCSAMM(
+						"Individual Asymptom Infectious Status") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final boolean meetsCondition(Object individual) {
+						return StatusEnum.asymptomInfectious == ((Individual) individual)
+								.getStatus();
+					}
+				});
+		individualList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCondCSAMM(
+						"Individual Symptom Infectious Status") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final boolean meetsCondition(Object individual) {
+						return StatusEnum.symptomInfectious == ((Individual) individual)
+								.getStatus();
+					}
+				});
+		individualList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCondCSAMM(
+						"Individual Recovered Status") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final boolean meetsCondition(Object individual) {
+						return StatusEnum.recovered == ((Individual) individual)
+								.getStatus();
+					}
+				});
+		individualList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCondCSAMM(
+						"Individual Dead Status") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final boolean meetsCondition(Object individual) {
+						return StatusEnum.dead == ((Individual) individual)
+								.getStatus();
+					}
+				});
+
+		individualList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCSAMM(
+						"Individual Exposure End Period") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final double getValue(Object individual) {
+						return ((Individual) individual).getExposureEndPeriod();
+					}
+				});
+
+		individualList
+				.addStatCollector(new org.ascape.util.data.StatCollectorCSAMM(
+						"Individual Contact Transmission Probability") {
+					private static final long serialVersionUID = 6846144446402098985L;
+					public final double getValue(Object individual) {
+						return ((Individual) individual)
+								.getContactTransmissionProbability();
+					}
+				});
+
+		individualList.addInitialRule(new org.ascape.model.rule.Rule(
+				"Initialize Location") {
+			private static final long serialVersionUID = 6846144446402098982L;
+			public void execute(org.ascape.model.Agent a) {
+				((name.milesparker.epi.Individual) a).initializeLocation();
+			}
+		});
+		individualList.addRule(new org.ascape.model.rule.Rule("Movement") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((name.milesparker.epi.Individual) a).movement();
+			}
+		});
+
+		individualList.addInitialRule(new org.ascape.model.rule.Rule(
+				"Initialize State") {
+			private static final long serialVersionUID = 6846144446402098982L;
+			public void execute(org.ascape.model.Agent a) {
+				((name.milesparker.epi.Individual) a).initializeState();
+			}
+		});
+		individualList.addRule(new org.ascape.model.rule.Rule("Transmission") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((name.milesparker.epi.Individual) a).transmission();
+			}
+		});
+		individualList.addRule(new org.ascape.model.rule.Rule("Progression") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((name.milesparker.epi.Individual) a).progression();
+			}
+		});
+
+	}
+
+	/**
+	 * Creates UI views for Epidemic.
+	 */
+	public void createGraphicViews() {
+		super.createGraphicViews();
+		org.ascape.view.vis.ChartView chart = new org.ascape.view.vis.ChartView();
+		org.eclipse.draw2d.Graphics dummyGraphics = new org.eclipse.draw2d.SWTGraphics(
+				new org.eclipse.swt.graphics.GC(
+						new org.eclipse.swt.graphics.Image(
+								org.eclipse.ui.PlatformUI.getWorkbench()
+										.getDisplay(), 10, 10)));
+
+		org.ascape.model.Scape individualScape = new Epidemic();
+		individualScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Individual individual = new Individual() {
+			public void requestUpdate() {
+			}
+		};
+		individualScape.add(individual);
+
+		org.ascape.model.HostCell individualHost = new org.ascape.model.HostCell() {
+			public void requestUpdate() {
+			}
+		};
+		individualHost.setOccupant((org.ascape.model.CellOccupant) individual);
+		org.eclipse.swt.graphics.Color individualLastColor = dummyGraphics
+				.getForegroundColor();
+		org.eclipse.swt.graphics.Color individualNewColor = dummyGraphics
+				.getForegroundColor();
+
+		IndividualStyle2DGraphics individualStyle2D = new IndividualStyle2DGraphics();
+
+		individual.setStatus(StatusEnum.susceptible);
+		individualStyle2D.draw(dummyGraphics, individualHost, 4, 4);
+		individualNewColor = dummyGraphics.getForegroundColor();
+		if (individualNewColor == individualLastColor) {
+			individualNewColor = org.ascape.util.vis.ColorFeatureConcrete
+					.createHSB((float) java.lang.Math.random() * 360f, 1.0f,
+							0.8f);
+		} else {
+			individualLastColor = individualNewColor;
+		}
+		chart.addSeries("Count Individual Susceptible Status",
+				individualNewColor);
+
+		individual.setStatus(StatusEnum.exposed);
+		individualStyle2D.draw(dummyGraphics, individualHost, 4, 4);
+		individualNewColor = dummyGraphics.getForegroundColor();
+		if (individualNewColor == individualLastColor) {
+			individualNewColor = org.ascape.util.vis.ColorFeatureConcrete
+					.createHSB((float) java.lang.Math.random() * 360f, 1.0f,
+							0.8f);
+		} else {
+			individualLastColor = individualNewColor;
+		}
+		chart.addSeries("Count Individual Exposed Status", individualNewColor);
+
+		individual.setStatus(StatusEnum.asymptomInfectious);
+		individualStyle2D.draw(dummyGraphics, individualHost, 4, 4);
+		individualNewColor = dummyGraphics.getForegroundColor();
+		if (individualNewColor == individualLastColor) {
+			individualNewColor = org.ascape.util.vis.ColorFeatureConcrete
+					.createHSB((float) java.lang.Math.random() * 360f, 1.0f,
+							0.8f);
+		} else {
+			individualLastColor = individualNewColor;
+		}
+		chart.addSeries("Count Individual Asymptom Infectious Status",
+				individualNewColor);
+
+		individual.setStatus(StatusEnum.symptomInfectious);
+		individualStyle2D.draw(dummyGraphics, individualHost, 4, 4);
+		individualNewColor = dummyGraphics.getForegroundColor();
+		if (individualNewColor == individualLastColor) {
+			individualNewColor = org.ascape.util.vis.ColorFeatureConcrete
+					.createHSB((float) java.lang.Math.random() * 360f, 1.0f,
+							0.8f);
+		} else {
+			individualLastColor = individualNewColor;
+		}
+		chart.addSeries("Count Individual Symptom Infectious Status",
+				individualNewColor);
+
+		individual.setStatus(StatusEnum.recovered);
+		individualStyle2D.draw(dummyGraphics, individualHost, 4, 4);
+		individualNewColor = dummyGraphics.getForegroundColor();
+		if (individualNewColor == individualLastColor) {
+			individualNewColor = org.ascape.util.vis.ColorFeatureConcrete
+					.createHSB((float) java.lang.Math.random() * 360f, 1.0f,
+							0.8f);
+		} else {
+			individualLastColor = individualNewColor;
+		}
+		chart
+				.addSeries("Count Individual Recovered Status",
+						individualNewColor);
+
+		individual.setStatus(StatusEnum.dead);
+		individualStyle2D.draw(dummyGraphics, individualHost, 4, 4);
+		individualNewColor = dummyGraphics.getForegroundColor();
+		if (individualNewColor == individualLastColor) {
+			individualNewColor = org.ascape.util.vis.ColorFeatureConcrete
+					.createHSB((float) java.lang.Math.random() * 360f, 1.0f,
+							0.8f);
+		} else {
+			individualLastColor = individualNewColor;
+		}
+		chart.addSeries("Count Individual Dead Status", individualNewColor);
+
+		org.ascape.model.Scape locationScape = new Epidemic();
+		locationScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Location location = new Location() {
+			public void requestUpdate() {
+			}
+		};
+		locationScape.add(location);
+
+		LocationStyle2DGraphics locationStyle2D = new LocationStyle2DGraphics();
+
+		addView(chart);
+		addView(new org.ascape.view.vis.GEFView());
+	}
+
+	public void scapeSetup(org.ascape.model.event.ScapeEvent scapeEvent) {
+		//Set the size of the scape populations, e.g. for mutable scapes that need to have their size reset
+
+		individualList.setSize(individualCount);
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartFactory() {
+		if (factory == null) {
+			factory = new EpidemicPartFactory();
+		}
+		return factory;
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartTreeFactory() {
+		if (treeFactory == null) {
+			treeFactory = new org.eclipse.amp.escape.ascape.adapt.AscapePartTreeFactory();
+		}
+		return treeFactory;
+	}
+
+	public static void main(String[] args) {
+		(new org.ascape.runtime.NonGraphicRunner())
+				.openInstance("name.milesparker.epi.Epidemic");
+	}
+
+	/**
+	 * .
+	 */
+
+	public void initializeProbabilities() {
+
+	}
+	/**
+	 * Gets the Individual Count property for Epidemic.
+	 * @return The number of individuals to create.
+	 */
+
+	public int getIndividualCount() {
+		return individualCount;
+	}
+
+	/**
+	 * Sets the Individual Count property for Epidemic.
+	 * The number of individuals to create.
+	 * @param _individualCount the new Individual Count value
+	 */
+
+	public void setIndividualCount(int _individualCount) {
+		individualCount = _individualCount;
+	}
+	/**
+	 * Gets the Initial Infection Probability property for Epidemic.
+	 * @return The probability that any given individual will be infected at the beginning of the model run. For example, if this value is .15, and their are 100 individuals in the model, roughly 15 of those individuals will be infected at time 0.
+	 */
+
+	public double getInitialInfectionProbability() {
+		return initialInfectionProbability;
+	}
+
+	/**
+	 * Sets the Initial Infection Probability property for Epidemic.
+	 * The probability that any given individual will be infected at the beginning of the model run. For example, if this value is .15, and their are 100 individuals in the model, roughly 15 of those individuals will be infected at time 0.
+	 * @param _initialInfectionProbability the new Initial Infection Probability value
+	 */
+
+	public void setInitialInfectionProbability(
+			double _initialInfectionProbability) {
+		initialInfectionProbability = _initialInfectionProbability;
+	}
+	/**
+	 * Gets the Min Contact Transmission Probability property for Epidemic.
+	 * @return The minimum probability that proximity to a single neighbor for a single period will result in transmission of infection. At the start of each model run, each individual is assigned a contact transmission probability between the minimum and maximum value. For example, if this value was .08 and the maximum value was 0.12 a given individual could have any value between those two, but the average transmission probability would be around .1. If minium and maximum values are the same, then all individuals will have the same chance of passing along infection to a given neighbor. This value must be between 0.0 and 1.0 and less than or equal to Max Contact transmission Probability.
+	 */
+
+	public double getMinContactTransmissionProbability() {
+		return minContactTransmissionProbability;
+	}
+
+	/**
+	 * Sets the Min Contact Transmission Probability property for Epidemic.
+	 * The minimum probability that proximity to a single neighbor for a single period will result in transmission of infection. At the start of each model run, each individual is assigned a contact transmission probability between the minimum and maximum value. For example, if this value was .08 and the maximum value was 0.12 a given individual could have any value between those two, but the average transmission probability would be around .1. If minium and maximum values are the same, then all individuals will have the same chance of passing along infection to a given neighbor. This value must be between 0.0 and 1.0 and less than or equal to Max Contact transmission Probability.
+	 * @param _minContactTransmissionProbability the new Min Contact Transmission Probability value
+	 */
+
+	public void setMinContactTransmissionProbability(
+			double _minContactTransmissionProbability) {
+		minContactTransmissionProbability = _minContactTransmissionProbability;
+	}
+	/**
+	 * Gets the Max Contact Transmission Probability property for Epidemic.
+	 * @return The maximum probability that proximity to a single neighbor for a single period will result in transmission of infection. See Min Contact Probability for more information. Must be a value between 0.0 and 1.0 and greater or equal to Min Contact Transmission Probability.
+	 */
+
+	public double getMaxContactTransmissionProbability() {
+		return maxContactTransmissionProbability;
+	}
+
+	/**
+	 * Sets the Max Contact Transmission Probability property for Epidemic.
+	 * The maximum probability that proximity to a single neighbor for a single period will result in transmission of infection. See Min Contact Probability for more information. Must be a value between 0.0 and 1.0 and greater or equal to Min Contact Transmission Probability.
+	 * @param _maxContactTransmissionProbability the new Max Contact Transmission Probability value
+	 */
+
+	public void setMaxContactTransmissionProbability(
+			double _maxContactTransmissionProbability) {
+		maxContactTransmissionProbability = _maxContactTransmissionProbability;
+	}
+	/**
+	 * Gets the Case Mortality Rate property for Epidemic.
+	 * @return The current probability that death will occur for a given individual as a result of infection. Some number between 0.0 and 1.0.
+	 */
+
+	public double getCaseMortalityRate() {
+		return caseMortalityRate;
+	}
+
+	/**
+	 * Sets the Case Mortality Rate property for Epidemic.
+	 * The current probability that death will occur for a given individual as a result of infection. Some number between 0.0 and 1.0.
+	 * @param _caseMortalityRate the new Case Mortality Rate value
+	 */
+
+	public void setCaseMortalityRate(double _caseMortalityRate) {
+		caseMortalityRate = _caseMortalityRate;
+	}
+	/**
+	 * Gets the Periods per Day property for Epidemic.
+	 * @return 
+	 */
+
+	public int getPeriodsperDay() {
+		return periodsperDay;
+	}
+
+	/**
+	 * Sets the Periods per Day property for Epidemic.
+	 * 
+	 * @param _periodsperDay the new Periods per Day value
+	 */
+
+	public void setPeriodsperDay(int _periodsperDay) {
+		periodsperDay = _periodsperDay;
+	}
+	/**
+	 * Gets the Min Period Exposure property for Epidemic.
+	 * @return The minimum amount of time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater.
+	 */
+
+	public int getMinPeriodExposure() {
+		return minPeriodExposure;
+	}
+
+	/**
+	 * Sets the Min Period Exposure property for Epidemic.
+	 * The minimum amount of time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater.
+	 * @param _minPeriodExposure the new Min Period Exposure value
+	 */
+
+	public void setMinPeriodExposure(int _minPeriodExposure) {
+		minPeriodExposure = _minPeriodExposure;
+	}
+	/**
+	 * Gets the Max Period Exposure property for Epidemic.
+	 * @return Maximum time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater.
+	 */
+
+	public int getMaxPeriodExposure() {
+		return maxPeriodExposure;
+	}
+
+	/**
+	 * Sets the Max Period Exposure property for Epidemic.
+	 * Maximum time from initial exposure to infectious asymptomatic or symptomatic state. 0 or greater.
+	 * @param _maxPeriodExposure the new Max Period Exposure value
+	 */
+
+	public void setMaxPeriodExposure(int _maxPeriodExposure) {
+		maxPeriodExposure = _maxPeriodExposure;
+	}
+	/**
+	 * Gets the Min Period Asymptom Infection property for Epidemic.
+	 * @return Maximum time spent infected without showing symptoms. 0 or greater.
+	 */
+
+	public int getMinPeriodAsymptomInfection() {
+		return minPeriodAsymptomInfection;
+	}
+
+	/**
+	 * Sets the Min Period Asymptom Infection property for Epidemic.
+	 * Maximum time spent infected without showing symptoms. 0 or greater.
+	 * @param _minPeriodAsymptomInfection the new Min Period Asymptom Infection value
+	 */
+
+	public void setMinPeriodAsymptomInfection(int _minPeriodAsymptomInfection) {
+		minPeriodAsymptomInfection = _minPeriodAsymptomInfection;
+	}
+	/**
+	 * Gets the Max Period Asymptom Infection property for Epidemic.
+	 * @return Maximum time spent infected without showing symptoms. May be zero!
+	 */
+
+	public int getMaxPeriodAsymptomInfection() {
+		return maxPeriodAsymptomInfection;
+	}
+
+	/**
+	 * Sets the Max Period Asymptom Infection property for Epidemic.
+	 * Maximum time spent infected without showing symptoms. May be zero!
+	 * @param _maxPeriodAsymptomInfection the new Max Period Asymptom Infection value
+	 */
+
+	public void setMaxPeriodAsymptomInfection(int _maxPeriodAsymptomInfection) {
+		maxPeriodAsymptomInfection = _maxPeriodAsymptomInfection;
+	}
+	/**
+	 * Gets the Min Period Symptom Infection property for Epidemic.
+	 * @return Minimum time spent infected with obvious symptoms. 0 or greater.
+	 */
+
+	public int getMinPeriodSymptomInfection() {
+		return minPeriodSymptomInfection;
+	}
+
+	/**
+	 * Sets the Min Period Symptom Infection property for Epidemic.
+	 * Minimum time spent infected with obvious symptoms. 0 or greater.
+	 * @param _minPeriodSymptomInfection the new Min Period Symptom Infection value
+	 */
+
+	public void setMinPeriodSymptomInfection(int _minPeriodSymptomInfection) {
+		minPeriodSymptomInfection = _minPeriodSymptomInfection;
+	}
+	/**
+	 * Gets the Max Period Symptom Infection property for Epidemic.
+	 * @return Maximum time spent infected with obvious symptoms. 1 or greater.
+	 */
+
+	public int getMaxPeriodSymptomInfection() {
+		return maxPeriodSymptomInfection;
+	}
+
+	/**
+	 * Sets the Max Period Symptom Infection property for Epidemic.
+	 * Maximum time spent infected with obvious symptoms. 1 or greater.
+	 * @param _maxPeriodSymptomInfection the new Max Period Symptom Infection value
+	 */
+
+	public void setMaxPeriodSymptomInfection(int _maxPeriodSymptomInfection) {
+		maxPeriodSymptomInfection = _maxPeriodSymptomInfection;
+	}
+	/**
+	 * Gets the Movement Probability property for Epidemic.
+	 * @return The chance that an agent will move within a given period. May be any value between 0.0 and 1.0.
+	 */
+
+	public double getMovementProbability() {
+		return movementProbability;
+	}
+
+	/**
+	 * Sets the Movement Probability property for Epidemic.
+	 * The chance that an agent will move within a given period. May be any value between 0.0 and 1.0.
+	 * @param _movementProbability the new Movement Probability value
+	 */
+
+	public void setMovementProbability(double _movementProbability) {
+		movementProbability = _movementProbability;
+	}
+	/**
+	 * Gets the Dimensions property for City.
+	 * @return The size of each dimension.
+	 */
+
+	public int[] getCityDimensions() {
+		return cityDimensions;
+	}
+
+	/**
+	 * Sets the Dimensions property for City.
+	 * The size of each dimension.
+	 * @param _cityDimensions the new Dimensions value
+	 */
+
+	public void setCityDimensions(int[] _cityDimensions) {
+		cityDimensions = _cityDimensions;
+	}
+	/**
+	 * Gets the Width property for City.
+	 * @return The horizontal extent of the space.
+	 */
+
+	public int getCityWidth() {
+		return cityDimensions[0];
+	}
+
+	/**
+	 * Sets the Width property for City.
+	 * The horizontal extent of the space.
+	 * @param _cityWidth the new Width value
+	 */
+
+	public void setCityWidth(int _cityWidth) {
+		cityDimensions[0] = _cityWidth;
+	}
+	/**
+	 * Gets the Height property for City.
+	 * @return The vertical extent of the space.
+	 */
+
+	public int getCityHeight() {
+		return cityDimensions[1];
+	}
+
+	/**
+	 * Sets the Height property for City.
+	 * The vertical extent of the space.
+	 * @param _cityHeight the new Height value
+	 */
+
+	public void setCityHeight(int _cityHeight) {
+		cityDimensions[1] = _cityHeight;
+	}
+	/**
+	 * Gets the City property for Epidemic.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getCity() {
+		return city;
+	}
+
+	/**
+	 * Sets the City property for Epidemic.
+	 * 
+	 * @param _city the new City value
+	 */
+
+	public void setCity(org.ascape.model.Scape _city) {
+		city = _city;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Epidemic " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/EpidemicPartFactory.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/EpidemicPartFactory.java
new file mode 100644
index 0000000..ad21c0f
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/EpidemicPartFactory.java
@@ -0,0 +1,18 @@
+package name.milesparker.epi;
+public class EpidemicPartFactory
+		extends
+			org.eclipse.amp.escape.ascape.adapt.AscapePartFactory {
+
+	protected org.eclipse.gef.EditPart getPartForElement(Object model) {
+
+		if (model instanceof Individual) {
+			return new name.milesparker.epi.IndividualStyle2D();
+		}
+
+		if (model instanceof Location) {
+			return new name.milesparker.epi.LocationStyle2D();
+		}
+
+		return super.getPartForElement(model);
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/Individual.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/Individual.java
new file mode 100644
index 0000000..49f99a6
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/Individual.java
@@ -0,0 +1,373 @@
+package name.milesparker.epi;
+
+/**
+ * Individual Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:48 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Individual extends org.ascape.model.CellOccupant {
+
+	/**
+	 * 
+	 */
+
+	private StatusEnum status = StatusEnum.susceptible;
+	/**
+	 * 
+	 */
+
+	private int exposureEndPeriod = 0;
+	/**
+	 * 
+	 */
+
+	private int asymptomaticEndPeriod = 0;
+	/**
+	 * 
+	 */
+
+	private int outcomePeriod = 0;
+	/**
+	 * 
+	 */
+
+	private double contactTransmissionProbability = 0.0;
+	/**
+	 * Constructs a new Individual.
+	 */
+
+	public Individual() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Individual clone = (Individual) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public Epidemic getEpidemic() {
+		return (Epidemic) getScape().getRoot();
+	}
+
+	/**
+	 * .
+	 */
+
+	public void initializeLocation() {
+
+		{
+
+			Location cityLocation = (Location) ((org.ascape.model.space.Discrete) getEpidemic()
+					.getCity().getSpace()).findRandomAvailable();
+			if (cityLocation != null) {
+
+				moveTo(cityLocation);
+
+			}
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void movement() {
+
+		double movementDraw = getRandom().nextDouble();
+
+		if ((getStatus() != StatusEnum.dead
+				&& movementDraw < getEpidemic().getMovementProbability()
+				&& getStatus() != StatusEnum.symptomInfectious && movementDraw < getEpidemic()
+				.getMovementProbability())) {
+
+			{
+
+				Location neighboringLocation = (Location) ((org.ascape.model.space.Discrete) getEpidemic()
+						.getCity().getSpace())
+						.findRandomAvailableNeighbor(((org.ascape.model.CellOccupant) this)
+								.getHostCell());
+				if (neighboringLocation != null) {
+
+					moveTo(neighboringLocation);
+
+				}
+
+			}
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void initializeState() {
+
+		double infectionDraw = getRandom().nextDouble();
+
+		double individualTransmissionRate = randomInRange(getEpidemic()
+				.getMinContactTransmissionProbability(), getEpidemic()
+				.getMaxContactTransmissionProbability());
+
+		if (infectionDraw < getEpidemic().getInitialInfectionProbability()) {
+
+			setStatus(StatusEnum.exposed);
+
+		}
+
+		setContactTransmissionProbability(individualTransmissionRate);
+
+	}
+
+	/**
+	 * .
+	 */
+
+	public void transmission() {
+
+		if ((getStatus() == StatusEnum.symptomInfectious || getStatus() == StatusEnum.asymptomInfectious)) {
+
+			{
+				org.ascape.util.Conditional vulnerableCondition = new org.ascape.util.Conditional() {
+					private static final long serialVersionUID = 6846144446402098985L;
+
+					public boolean meetsCondition(Object vulnerableCell) {
+						if (vulnerableCell instanceof Individual) {
+							Individual vulnerable = (Individual) vulnerableCell;
+							return true;
+						} else {
+							return false;
+						}
+					}
+				};
+
+				Individual vulnerable = (Individual) ((org.ascape.model.space.Discrete) getEpidemic()
+						.getCity().getSpace()).findRandomNeighbor(this,
+						vulnerableCondition);
+				if (vulnerable != null) {
+
+					if (vulnerable.getStatus() == StatusEnum.susceptible) {
+
+						double transmissionDraw = getRandom().nextDouble();
+
+						if (transmissionDraw < vulnerable
+								.getContactTransmissionProbability()) {
+
+							vulnerable.setStatus(StatusEnum.exposed);
+
+						}
+
+					}
+
+				}
+
+			}
+
+		}
+
+	}
+
+	/**
+	 * .
+	 */
+
+	public void progression() {
+
+		int progressionPeriod = getScape().getPeriod();
+
+		if ((getExposureEndPeriod() != getAsymptomaticEndPeriod() && progressionPeriod == getExposureEndPeriod())) {
+
+			setStatus(StatusEnum.asymptomInfectious);
+
+		}
+
+		if (progressionPeriod == getOutcomePeriod()) {
+
+			double mortalityDraw = getRandom().nextDouble();
+
+			if (mortalityDraw < getEpidemic().getCaseMortalityRate()) {
+
+				setStatus(StatusEnum.dead);
+
+			}
+
+			if (!(mortalityDraw < getEpidemic().getCaseMortalityRate())) {
+
+				setStatus(StatusEnum.recovered);
+
+			}
+
+		}
+
+		if ((progressionPeriod == getExposureEndPeriod() && getExposureEndPeriod() == getAsymptomaticEndPeriod())) {
+
+			setStatus(StatusEnum.symptomInfectious);
+
+		}
+
+		if ((progressionPeriod == getAsymptomaticEndPeriod() && getExposureEndPeriod() != getAsymptomaticEndPeriod())) {
+
+			setStatus(StatusEnum.symptomInfectious);
+
+		}
+
+	}
+
+	/**
+	 * Watch for changes in Status..
+	 */
+
+	public void exposure() {
+
+		if (getStatus() == StatusEnum.exposed) {
+
+			int exposureNow = getScape().getPeriod();
+
+			int exposureLength = randomInRange(getEpidemic()
+					.getMinPeriodExposure(), getEpidemic()
+					.getMaxPeriodExposure());
+
+			int endExposure = exposureNow + exposureLength;
+
+			setExposureEndPeriod(endExposure);
+			int asymptomaticLength = randomInRange(getEpidemic()
+					.getMinPeriodAsymptomInfection(), getEpidemic()
+					.getMaxPeriodAsymptomInfection());
+
+			int endAsymptomatic = endExposure + asymptomaticLength;
+
+			setAsymptomaticEndPeriod(endAsymptomatic);
+			int symptomLength = randomInRange(getEpidemic()
+					.getMinPeriodSymptomInfection(), getEpidemic()
+					.getMaxPeriodSymptomInfection());
+
+			int endInfection = endAsymptomatic + symptomLength;
+
+			setOutcomePeriod(endInfection);
+
+		}
+
+	}
+
+	/**
+	 * Gets the Status property for Individual.
+	 * @return 
+	 */
+
+	public StatusEnum getStatus() {
+		return status;
+	}
+
+	/**
+	 * Sets the Status property for Individual.
+	 * 
+	 * @param _status the new Status value
+	 */
+
+	public void setStatus(StatusEnum _status) {
+		status = _status;
+		exposure();
+	}
+	/**
+	 * Gets the Exposure End Period property for Individual.
+	 * @return 
+	 */
+
+	public int getExposureEndPeriod() {
+		return exposureEndPeriod;
+	}
+
+	/**
+	 * Sets the Exposure End Period property for Individual.
+	 * 
+	 * @param _exposureEndPeriod the new Exposure End Period value
+	 */
+
+	public void setExposureEndPeriod(int _exposureEndPeriod) {
+		exposureEndPeriod = _exposureEndPeriod;
+	}
+	/**
+	 * Gets the Asymptomatic End Period property for Individual.
+	 * @return 
+	 */
+
+	public int getAsymptomaticEndPeriod() {
+		return asymptomaticEndPeriod;
+	}
+
+	/**
+	 * Sets the Asymptomatic End Period property for Individual.
+	 * 
+	 * @param _asymptomaticEndPeriod the new Asymptomatic End Period value
+	 */
+
+	public void setAsymptomaticEndPeriod(int _asymptomaticEndPeriod) {
+		asymptomaticEndPeriod = _asymptomaticEndPeriod;
+	}
+	/**
+	 * Gets the Outcome Period property for Individual.
+	 * @return 
+	 */
+
+	public int getOutcomePeriod() {
+		return outcomePeriod;
+	}
+
+	/**
+	 * Sets the Outcome Period property for Individual.
+	 * 
+	 * @param _outcomePeriod the new Outcome Period value
+	 */
+
+	public void setOutcomePeriod(int _outcomePeriod) {
+		outcomePeriod = _outcomePeriod;
+	}
+	/**
+	 * Gets the Contact Transmission Probability property for Individual.
+	 * @return 
+	 */
+
+	public double getContactTransmissionProbability() {
+		return contactTransmissionProbability;
+	}
+
+	/**
+	 * Sets the Contact Transmission Probability property for Individual.
+	 * 
+	 * @param _contactTransmissionProbability the new Contact Transmission Probability value
+	 */
+
+	public void setContactTransmissionProbability(
+			double _contactTransmissionProbability) {
+		contactTransmissionProbability = _contactTransmissionProbability;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Individual " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/IndividualStyle2D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/IndividualStyle2D.java
new file mode 100644
index 0000000..8c1bd1b
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/IndividualStyle2D.java
@@ -0,0 +1,134 @@
+package name.milesparker.epi;
+
+/**
+ * Individual Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:49 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class IndividualStyle2D extends org.eclipse.amp.agf.gef.AgentEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		Individual individualRule = (Individual) getModel();
+
+		if (individualRule.getStatus() == StatusEnum.susceptible) {
+
+			if (!createFigure) {
+				color = org.eclipse.draw2d.ColorConstants.blue;
+
+			}
+			if (createFigure) {
+				figure = shapeOval();
+			}
+
+			if (!createFigure) {
+				figure.setBackgroundColor(color);
+				((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+			}
+
+		}
+
+		if (individualRule.getStatus() == StatusEnum.exposed) {
+
+			if (!createFigure) {
+				color = org.eclipse.draw2d.ColorConstants.yellow;
+
+			}
+			if (createFigure) {
+				figure = shapeOval();
+			}
+
+			if (!createFigure) {
+				figure.setBackgroundColor(color);
+				((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+			}
+
+		}
+
+		if (individualRule.getStatus() == StatusEnum.asymptomInfectious) {
+
+			if (!createFigure) {
+				color = org.eclipse.draw2d.ColorConstants.orange;
+
+			}
+			if (createFigure) {
+				figure = shapeOval();
+			}
+
+			if (!createFigure) {
+				figure.setBackgroundColor(color);
+				((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+			}
+
+		}
+
+		if (individualRule.getStatus() == StatusEnum.recovered) {
+
+			if (!createFigure) {
+				color = org.eclipse.draw2d.ColorConstants.green;
+
+			}
+			if (createFigure) {
+				figure = shapeOval();
+			}
+
+			if (!createFigure) {
+				figure.setBackgroundColor(color);
+				((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+			}
+
+		}
+
+		if (individualRule.getStatus() == StatusEnum.dead) {
+
+			if (!createFigure) {
+				color = org.eclipse.draw2d.ColorConstants.black;
+
+			}
+			if (createFigure) {
+				figure = shapeOval();
+			}
+
+			if (!createFigure) {
+				figure.setBackgroundColor(color);
+				((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+			}
+
+		}
+
+		if (individualRule.getStatus() == StatusEnum.symptomInfectious) {
+
+			if (!createFigure) {
+				color = org.eclipse.draw2d.ColorConstants.red;
+
+			}
+			if (createFigure) {
+				figure = shapeOval();
+			}
+
+			if (!createFigure) {
+				figure.setBackgroundColor(color);
+				((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+			}
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/IndividualStyle2D3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/IndividualStyle2D3DEditPart.java
new file mode 100644
index 0000000..3685edc
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/IndividualStyle2D3DEditPart.java
@@ -0,0 +1,83 @@
+package name.milesparker.epi;
+
+/**
+ * Individual Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:56 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class IndividualStyle2D3DEditPart
+		extends
+			org.eclipse.amp.agf3d.CubeEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		for (int i = 1; i <= 4; i++) {
+			setShowMarker(i, false);
+		}
+
+		Individual individualRule = (Individual) getModel();
+
+		if (individualRule.getStatus() == StatusEnum.susceptible) {
+
+			color = org.eclipse.draw2d.ColorConstants.blue;
+
+			shape = getCube();
+
+			shape.setColor(color, 255);
+
+		}
+
+		if (individualRule.getStatus() == StatusEnum.exposed) {
+
+			color = org.eclipse.draw2d.ColorConstants.yellow;
+
+			shape = getCube();
+
+			shape.setColor(color, 255);
+
+		}
+
+		if (individualRule.getStatus() == StatusEnum.asymptomInfectious) {
+
+			color = org.eclipse.draw2d.ColorConstants.orange;
+
+			shape = getCube();
+
+			shape.setColor(color, 255);
+
+		}
+
+		if (individualRule.getStatus() == StatusEnum.recovered) {
+
+			color = org.eclipse.draw2d.ColorConstants.green;
+
+			shape = getCube();
+
+			shape.setColor(color, 255);
+
+		}
+
+		if (individualRule.getStatus() == StatusEnum.dead) {
+
+			color = org.eclipse.draw2d.ColorConstants.black;
+
+			shape = getCube();
+
+			shape.setColor(color, 255);
+
+		}
+
+		if (individualRule.getStatus() == StatusEnum.symptomInfectious) {
+
+			color = org.eclipse.draw2d.ColorConstants.red;
+
+			shape = getCube();
+
+			shape.setColor(color, 255);
+
+		}
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/IndividualStyle2DGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/IndividualStyle2DGraphics.java
new file mode 100644
index 0000000..d0c1e1e
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/IndividualStyle2DGraphics.java
@@ -0,0 +1,135 @@
+package name.milesparker.epi;
+
+/**
+ * Individual Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:53 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class IndividualStyle2DGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		org.ascape.model.HostCell rootActGroupCell = (org.ascape.model.HostCell) object;
+		if (rootActGroupCell.getOccupant() instanceof Individual) {
+			Individual rootActGroup = (Individual) rootActGroupCell
+					.getOccupant();
+			Individual individualRule = rootActGroup;
+
+			if (individualRule.getStatus() == StatusEnum.susceptible) {
+				org.eclipse.swt.graphics.Color individualRuleColorBlue = org.eclipse.draw2d.ColorConstants.blue;
+
+				g.setForegroundColor(individualRuleColorBlue);
+				g.setBackgroundColor(individualRuleColorBlue);
+				shape = shape.oval;
+				if (shape == Shapes.oval) {
+					g.fillOval(0, 0, width, height);
+				} else if (shape == Shapes.marker) {
+					int d = (int) (width * .25 - 1);
+					int d2 = (int) (width * .5 - 1);
+					g.fillOval(d, d, d2, d2);
+				} else if (shape == Shapes.rectangle) {
+					g.fillRectangle(0, 0, width, height);
+				}
+
+			}
+
+			if (individualRule.getStatus() == StatusEnum.exposed) {
+				org.eclipse.swt.graphics.Color individualRuleColorYellow = org.eclipse.draw2d.ColorConstants.yellow;
+
+				g.setForegroundColor(individualRuleColorYellow);
+				g.setBackgroundColor(individualRuleColorYellow);
+				shape = shape.oval;
+				if (shape == Shapes.oval) {
+					g.fillOval(0, 0, width, height);
+				} else if (shape == Shapes.marker) {
+					int d = (int) (width * .25 - 1);
+					int d2 = (int) (width * .5 - 1);
+					g.fillOval(d, d, d2, d2);
+				} else if (shape == Shapes.rectangle) {
+					g.fillRectangle(0, 0, width, height);
+				}
+
+			}
+
+			if (individualRule.getStatus() == StatusEnum.asymptomInfectious) {
+				org.eclipse.swt.graphics.Color individualRuleColorOrange = org.eclipse.draw2d.ColorConstants.orange;
+
+				g.setForegroundColor(individualRuleColorOrange);
+				g.setBackgroundColor(individualRuleColorOrange);
+				shape = shape.oval;
+				if (shape == Shapes.oval) {
+					g.fillOval(0, 0, width, height);
+				} else if (shape == Shapes.marker) {
+					int d = (int) (width * .25 - 1);
+					int d2 = (int) (width * .5 - 1);
+					g.fillOval(d, d, d2, d2);
+				} else if (shape == Shapes.rectangle) {
+					g.fillRectangle(0, 0, width, height);
+				}
+
+			}
+
+			if (individualRule.getStatus() == StatusEnum.recovered) {
+				org.eclipse.swt.graphics.Color individualRuleColorGreen = org.eclipse.draw2d.ColorConstants.green;
+
+				g.setForegroundColor(individualRuleColorGreen);
+				g.setBackgroundColor(individualRuleColorGreen);
+				shape = shape.oval;
+				if (shape == Shapes.oval) {
+					g.fillOval(0, 0, width, height);
+				} else if (shape == Shapes.marker) {
+					int d = (int) (width * .25 - 1);
+					int d2 = (int) (width * .5 - 1);
+					g.fillOval(d, d, d2, d2);
+				} else if (shape == Shapes.rectangle) {
+					g.fillRectangle(0, 0, width, height);
+				}
+
+			}
+
+			if (individualRule.getStatus() == StatusEnum.dead) {
+				org.eclipse.swt.graphics.Color individualRuleColorBlack = org.eclipse.draw2d.ColorConstants.black;
+
+				g.setForegroundColor(individualRuleColorBlack);
+				g.setBackgroundColor(individualRuleColorBlack);
+				shape = shape.oval;
+				if (shape == Shapes.oval) {
+					g.fillOval(0, 0, width, height);
+				} else if (shape == Shapes.marker) {
+					int d = (int) (width * .25 - 1);
+					int d2 = (int) (width * .5 - 1);
+					g.fillOval(d, d, d2, d2);
+				} else if (shape == Shapes.rectangle) {
+					g.fillRectangle(0, 0, width, height);
+				}
+
+			}
+
+			if (individualRule.getStatus() == StatusEnum.symptomInfectious) {
+				org.eclipse.swt.graphics.Color individualRuleColorRed = org.eclipse.draw2d.ColorConstants.red;
+
+				g.setForegroundColor(individualRuleColorRed);
+				g.setBackgroundColor(individualRuleColorRed);
+				shape = shape.oval;
+				if (shape == Shapes.oval) {
+					g.fillOval(0, 0, width, height);
+				} else if (shape == Shapes.marker) {
+					int d = (int) (width * .25 - 1);
+					int d2 = (int) (width * .5 - 1);
+					g.fillOval(d, d, d2, d2);
+				} else if (shape == Shapes.rectangle) {
+					g.fillRectangle(0, 0, width, height);
+				}
+
+			}
+
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/Location.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/Location.java
new file mode 100644
index 0000000..884dd6b
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/Location.java
@@ -0,0 +1,54 @@
+package name.milesparker.epi;
+
+/**
+ * Location Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:49 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Location extends org.ascape.model.HostCell {
+
+	/**
+	 * Constructs a new Location.
+	 */
+
+	public Location() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Location clone = (Location) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public Epidemic getEpidemic() {
+		return (Epidemic) getScape().getRoot();
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Location " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/LocationStyle2D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/LocationStyle2D.java
new file mode 100644
index 0000000..3a58037
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/LocationStyle2D.java
@@ -0,0 +1,42 @@
+package name.milesparker.epi;
+
+/**
+ * Location Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:49 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class LocationStyle2D
+		extends
+			org.eclipse.amp.escape.ascape.gef.HostCellEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		Location locationRule = (Location) getModel();
+
+		if (!createFigure) {
+			color = org.eclipse.draw2d.ColorConstants.black;
+
+		}
+		if (createFigure) {
+			figure = shapeRectangle();
+		}
+
+		if (!createFigure) {
+			figure.setBackgroundColor(color);
+			((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/LocationStyle2D3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/LocationStyle2D3DEditPart.java
new file mode 100644
index 0000000..acd1a46
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/LocationStyle2D3DEditPart.java
@@ -0,0 +1,25 @@
+package name.milesparker.epi;
+
+/**
+ * Location Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:56 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class LocationStyle2D3DEditPart
+		extends
+			org.eclipse.amp.agf3d.TileEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		Location locationRule = (Location) getModel();
+
+		color = org.eclipse.draw2d.ColorConstants.black;
+
+		shape = getCube();
+
+		shape.setColor(color, 255);
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/LocationStyle2DGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/LocationStyle2DGraphics.java
new file mode 100644
index 0000000..692fa6c
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/LocationStyle2DGraphics.java
@@ -0,0 +1,38 @@
+package name.milesparker.epi;
+
+/**
+ * Location Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:53 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class LocationStyle2DGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		Location rootActGroup = (Location) object;
+		Location locationRule = rootActGroup;
+
+		org.eclipse.swt.graphics.Color locationRuleColorBlack = org.eclipse.draw2d.ColorConstants.black;
+
+		g.setForegroundColor(locationRuleColorBlack);
+		g.setBackgroundColor(locationRuleColorBlack);
+		shape = shape.rectangle;
+		if (shape == Shapes.oval) {
+			g.fillOval(0, 0, width, height);
+		} else if (shape == Shapes.marker) {
+			int d = (int) (width * .25 - 1);
+			int d2 = (int) (width * .5 - 1);
+			g.fillOval(d, d, d2, d2);
+		} else if (shape == Shapes.rectangle) {
+			g.fillRectangle(0, 0, width, height);
+		}
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/StatusEnum.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/StatusEnum.java
new file mode 100644
index 0000000..7cb1e1d
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/name/milesparker/epi/StatusEnum.java
@@ -0,0 +1,22 @@
+package name.milesparker.epi;
+
+/**
+ * Status Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:49 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public enum StatusEnum {
+	susceptible("Susceptible"), exposed("Exposed"), asymptomInfectious(
+			"Asymptom Infectious"), symptomInfectious("Symptom Infectious"), recovered(
+			"Recovered"), dead("Dead");
+
+	private final String name;
+
+	private StatusEnum(String name) {
+		this.name = name;
+	}
+
+	public String toString() {
+		return name;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/Bug.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/Bug.java
new file mode 100644
index 0000000..7155d6b
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/Bug.java
@@ -0,0 +1,95 @@
+package org.metaabm.examples.stupid1;
+
+/**
+ * Bug Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:47 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Bug extends org.ascape.model.CellOccupant {
+
+	/**
+	 * Constructs a new Bug.
+	 */
+
+	public Bug() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Bug clone = (Bug) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public StupidModel1 getStupidModel1() {
+		return (StupidModel1) getScape().getRoot();
+	}
+
+	/**
+	 * .
+	 */
+
+	public void intializeNonFramework() {
+
+		{
+
+			Habitat randomHabitat = (Habitat) ((org.ascape.model.space.Discrete) getStupidModel1()
+					.getGrid2D().getSpace()).findRandomAvailable();
+			if (randomHabitat != null) {
+
+				moveTo(randomHabitat);
+
+			}
+
+		}
+
+	}
+	/**
+	 * Move to a neighboring space. (In this version we also have to manually notify the bug's broker. :( ).
+	 */
+
+	public void bugRule() {
+
+		{
+
+			Habitat nearbySpace = (Habitat) ((org.ascape.model.space.Discrete) getStupidModel1()
+					.getGrid2D().getSpace()).findRandomAvailable(
+					((org.ascape.model.CellOccupant) this).getHostCell(), null,
+					false, getStupidModel1().getBugVision());
+			if (nearbySpace != null) {
+
+				moveTo(nearbySpace);
+
+			}
+
+		}
+
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Bug " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/BugStyle2D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/BugStyle2D.java
new file mode 100644
index 0000000..6683162
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/BugStyle2D.java
@@ -0,0 +1,40 @@
+package org.metaabm.examples.stupid1;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:47 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2D extends org.eclipse.amp.agf.gef.AgentEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		Bug bugRule = (Bug) getModel();
+
+		if (!createFigure) {
+			color = org.eclipse.draw2d.ColorConstants.red;
+
+		}
+		if (createFigure) {
+			figure = shapeOval();
+		}
+
+		if (!createFigure) {
+			figure.setBackgroundColor(color);
+			((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/BugStyle2D3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/BugStyle2D3DEditPart.java
new file mode 100644
index 0000000..f341d77
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/BugStyle2D3DEditPart.java
@@ -0,0 +1,27 @@
+package org.metaabm.examples.stupid1;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:56 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2D3DEditPart extends org.eclipse.amp.agf3d.CubeEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		for (int i = 1; i <= 4; i++) {
+			setShowMarker(i, false);
+		}
+
+		Bug bugRule = (Bug) getModel();
+
+		color = org.eclipse.draw2d.ColorConstants.red;
+
+		shape = getCube();
+
+		shape.setColor(color, 255);
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/BugStyle2DGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/BugStyle2DGraphics.java
new file mode 100644
index 0000000..230c477
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/BugStyle2DGraphics.java
@@ -0,0 +1,41 @@
+package org.metaabm.examples.stupid1;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:52 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2DGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		org.ascape.model.HostCell rootActGroupCell = (org.ascape.model.HostCell) object;
+		if (rootActGroupCell.getOccupant() instanceof Bug) {
+			Bug rootActGroup = (Bug) rootActGroupCell.getOccupant();
+			Bug bugRule = rootActGroup;
+
+			org.eclipse.swt.graphics.Color bugRuleColorRed = org.eclipse.draw2d.ColorConstants.red;
+
+			g.setForegroundColor(bugRuleColorRed);
+			g.setBackgroundColor(bugRuleColorRed);
+			shape = shape.oval;
+			if (shape == Shapes.oval) {
+				g.fillOval(0, 0, width, height);
+			} else if (shape == Shapes.marker) {
+				int d = (int) (width * .25 - 1);
+				int d2 = (int) (width * .5 - 1);
+				g.fillOval(d, d, d2, d2);
+			} else if (shape == Shapes.rectangle) {
+				g.fillRectangle(0, 0, width, height);
+			}
+
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/Habitat.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/Habitat.java
new file mode 100644
index 0000000..81a61d5
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/Habitat.java
@@ -0,0 +1,54 @@
+package org.metaabm.examples.stupid1;
+
+/**
+ * Habitat Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:47 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Habitat extends org.ascape.model.HostCell {
+
+	/**
+	 * Constructs a new Habitat.
+	 */
+
+	public Habitat() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Habitat clone = (Habitat) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public StupidModel1 getStupidModel1() {
+		return (StupidModel1) getScape().getRoot();
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Habitat " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/HabitatStyle2D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/HabitatStyle2D.java
new file mode 100644
index 0000000..2777c31
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/HabitatStyle2D.java
@@ -0,0 +1,42 @@
+package org.metaabm.examples.stupid1;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:47 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2D
+		extends
+			org.eclipse.amp.escape.ascape.gef.HostCellEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		Habitat habitatRule = (Habitat) getModel();
+
+		if (!createFigure) {
+			color = org.eclipse.draw2d.ColorConstants.green;
+
+		}
+		if (createFigure) {
+			figure = shapeRectangle();
+		}
+
+		if (!createFigure) {
+			figure.setBackgroundColor(color);
+			((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/HabitatStyle2D3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/HabitatStyle2D3DEditPart.java
new file mode 100644
index 0000000..a78b116
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/HabitatStyle2D3DEditPart.java
@@ -0,0 +1,25 @@
+package org.metaabm.examples.stupid1;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:56 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2D3DEditPart
+		extends
+			org.eclipse.amp.agf3d.TileEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		Habitat habitatRule = (Habitat) getModel();
+
+		color = org.eclipse.draw2d.ColorConstants.green;
+
+		shape = getCube();
+
+		shape.setColor(color, 255);
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/HabitatStyle2DGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/HabitatStyle2DGraphics.java
new file mode 100644
index 0000000..475bca9
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/HabitatStyle2DGraphics.java
@@ -0,0 +1,38 @@
+package org.metaabm.examples.stupid1;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:52 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2DGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		Habitat rootActGroup = (Habitat) object;
+		Habitat habitatRule = rootActGroup;
+
+		org.eclipse.swt.graphics.Color habitatRuleColorGreen = org.eclipse.draw2d.ColorConstants.green;
+
+		g.setForegroundColor(habitatRuleColorGreen);
+		g.setBackgroundColor(habitatRuleColorGreen);
+		shape = shape.rectangle;
+		if (shape == Shapes.oval) {
+			g.fillOval(0, 0, width, height);
+		} else if (shape == Shapes.marker) {
+			int d = (int) (width * .25 - 1);
+			int d2 = (int) (width * .5 - 1);
+			g.fillOval(d, d, d2, d2);
+		} else if (shape == Shapes.rectangle) {
+			g.fillRectangle(0, 0, width, height);
+		}
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/StupidModel1.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/StupidModel1.java
new file mode 100644
index 0000000..7f3767b
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/StupidModel1.java
@@ -0,0 +1,384 @@
+package org.metaabm.examples.stupid1;
+
+/**
+ * StupidModel1 Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:47 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class StupidModel1 extends org.ascape.model.Scape
+		implements
+			org.eclipse.amp.agf.gef.ModelFactoryProvider {
+
+	/**
+	 * The number of bugs to create.
+	 */
+
+	private int bugCount = 100;
+	/**
+	 * The number of habitats to create.
+	 */
+
+	private int habitatCount = 0;
+	/**
+	 * 
+	 */
+
+	private int bugVision = 4;
+	/**
+	 * The size of each dimension.
+	 */
+
+	private int[] grid2DDimensions = new int[2];
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape grid2D = null;
+	/**
+	 * Constructs a new StupidModel1.
+	 */
+
+	public StupidModel1() {
+		createUniqueID();
+		setGrid2DWidth(100);
+		setGrid2DHeight(100);
+	}
+
+	org.eclipse.gef.EditPartFactory factory;
+
+	org.eclipse.gef.EditPartFactory treeFactory;
+
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			StupidModel1 clone = (StupidModel1) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape bugList = null;
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape habitatList = null;
+
+	/**
+	 * Gets the Bug property for StupidModel1.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getBug() {
+		return bugList;
+	}
+
+	/**
+	 * Sets the Bug property for StupidModel1.
+	 * 
+	 * @param _bug the new Bug value
+	 */
+
+	public void setBug(org.ascape.model.Scape _bug) {
+		bugList = _bug;
+	}
+	/**
+	 * Gets the Habitat property for StupidModel1.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getHabitat() {
+		return habitatList;
+	}
+
+	/**
+	 * Sets the Habitat property for StupidModel1.
+	 * 
+	 * @param _habitat the new Habitat value
+	 */
+
+	public void setHabitat(org.ascape.model.Scape _habitat) {
+		habitatList = _habitat;
+	}
+
+	/**
+	 * Creates the members of StupidModel1. 
+	 */
+	public void createScape() {
+		super.createScape();
+		setName(toString());
+
+		Bug bugProto = new Bug();
+		bugList = new org.ascape.model.Scape();
+		bugList.setName("Bug");
+		bugList.setPrototypeAgent(bugProto);
+		bugList.setExecutionOrder(org.ascape.model.Scape.RULE_ORDER);
+
+		grid2D = new org.ascape.model.Scape(
+				new org.ascape.model.space.Array2DMoore());
+		grid2D.setPrototypeAgent(new Habitat());
+		grid2D.setExtent(new org.ascape.model.space.Coordinate2DDiscrete(
+				getGrid2DDimensions()));
+		grid2D.setName("Fill Grid");
+		((org.ascape.model.space.CollectionSpace) grid2D.getSpace())
+				.setPeriodic(true);
+		add(grid2D);
+		org.ascape.model.Scape habitatList = grid2D;
+
+		add(bugList);
+
+		bugProto.setHostScape(grid2D);
+		grid2D.getRules().clear();
+
+		bugList.addStatCollector(new org.ascape.util.data.StatCollectorCSA(
+				"Bug Population") {
+			private static final long serialVersionUID = 684614444640209893L;
+
+			@SuppressWarnings("unused")
+			public final boolean meetsCondition(Object object) {
+				return true;
+			}
+		});
+
+		bugList.addInitialRule(new org.ascape.model.rule.Rule("Initialize") {
+			private static final long serialVersionUID = 6846144446402098982L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid1.Bug) a).intializeNonFramework();
+			}
+		});
+		bugList.addRule(new org.ascape.model.rule.Rule("Bug Rule") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid1.Bug) a).bugRule();
+			}
+		});
+
+	}
+
+	/**
+	 * Creates UI views for StupidModel1.
+	 */
+	public void createGraphicViews() {
+		super.createGraphicViews();
+		org.ascape.view.vis.ChartView chart = new org.ascape.view.vis.ChartView();
+		org.eclipse.draw2d.Graphics dummyGraphics = new org.eclipse.draw2d.SWTGraphics(
+				new org.eclipse.swt.graphics.GC(
+						new org.eclipse.swt.graphics.Image(
+								org.eclipse.ui.PlatformUI.getWorkbench()
+										.getDisplay(), 10, 10)));
+
+		org.ascape.model.Scape bugScape = new StupidModel1();
+		bugScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Bug bug = new Bug() {
+			public void requestUpdate() {
+			}
+		};
+		bugScape.add(bug);
+
+		org.ascape.model.HostCell bugHost = new org.ascape.model.HostCell() {
+			public void requestUpdate() {
+			}
+		};
+		bugHost.setOccupant((org.ascape.model.CellOccupant) bug);
+		org.eclipse.swt.graphics.Color bugLastColor = dummyGraphics
+				.getForegroundColor();
+		org.eclipse.swt.graphics.Color bugNewColor = dummyGraphics
+				.getForegroundColor();
+
+		BugStyle2DGraphics bugStyle2D = new BugStyle2DGraphics();
+
+		org.ascape.model.Scape habitatScape = new StupidModel1();
+		habitatScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Habitat habitat = new Habitat() {
+			public void requestUpdate() {
+			}
+		};
+		habitatScape.add(habitat);
+
+		HabitatStyle2DGraphics habitatStyle2D = new HabitatStyle2DGraphics();
+
+		addView(chart);
+		addView(new org.ascape.view.vis.GEFView());
+	}
+
+	public void scapeSetup(org.ascape.model.event.ScapeEvent scapeEvent) {
+		//Set the size of the scape populations, e.g. for mutable scapes that need to have their size reset
+
+		bugList.setSize(bugCount);
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartFactory() {
+		if (factory == null) {
+			factory = new StupidModel1PartFactory();
+		}
+		return factory;
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartTreeFactory() {
+		if (treeFactory == null) {
+			treeFactory = new org.eclipse.amp.escape.ascape.adapt.AscapePartTreeFactory();
+		}
+		return treeFactory;
+	}
+
+	public static void main(String[] args) {
+		(new org.ascape.runtime.NonGraphicRunner())
+				.openInstance("org.metaabm.examples.stupid1.StupidModel1");
+	}
+
+	/**
+	 * Gets the Bug Count property for StupidModel1.
+	 * @return The number of bugs to create.
+	 */
+
+	public int getBugCount() {
+		return bugCount;
+	}
+
+	/**
+	 * Sets the Bug Count property for StupidModel1.
+	 * The number of bugs to create.
+	 * @param _bugCount the new Bug Count value
+	 */
+
+	public void setBugCount(int _bugCount) {
+		bugCount = _bugCount;
+	}
+	/**
+	 * Gets the Habitat Count property for StupidModel1.
+	 * @return The number of habitats to create.
+	 */
+
+	public int getHabitatCount() {
+		return habitatCount;
+	}
+
+	/**
+	 * Sets the Habitat Count property for StupidModel1.
+	 * The number of habitats to create.
+	 * @param _habitatCount the new Habitat Count value
+	 */
+
+	public void setHabitatCount(int _habitatCount) {
+		habitatCount = _habitatCount;
+	}
+	/**
+	 * Gets the Bug Vision property for StupidModel1.
+	 * @return 
+	 */
+
+	public int getBugVision() {
+		return bugVision;
+	}
+
+	/**
+	 * Sets the Bug Vision property for StupidModel1.
+	 * 
+	 * @param _bugVision the new Bug Vision value
+	 */
+
+	public void setBugVision(int _bugVision) {
+		bugVision = _bugVision;
+	}
+	/**
+	 * Gets the Dimensions property for Grid 2D.
+	 * @return The size of each dimension.
+	 */
+
+	public int[] getGrid2DDimensions() {
+		return grid2DDimensions;
+	}
+
+	/**
+	 * Sets the Dimensions property for Grid 2D.
+	 * The size of each dimension.
+	 * @param _grid2DDimensions the new Dimensions value
+	 */
+
+	public void setGrid2DDimensions(int[] _grid2DDimensions) {
+		grid2DDimensions = _grid2DDimensions;
+	}
+	/**
+	 * Gets the Width property for Grid 2D.
+	 * @return The horizontal extent of the space.
+	 */
+
+	public int getGrid2DWidth() {
+		return grid2DDimensions[0];
+	}
+
+	/**
+	 * Sets the Width property for Grid 2D.
+	 * The horizontal extent of the space.
+	 * @param _grid2DWidth the new Width value
+	 */
+
+	public void setGrid2DWidth(int _grid2DWidth) {
+		grid2DDimensions[0] = _grid2DWidth;
+	}
+	/**
+	 * Gets the Height property for Grid 2D.
+	 * @return The vertical extent of the space.
+	 */
+
+	public int getGrid2DHeight() {
+		return grid2DDimensions[1];
+	}
+
+	/**
+	 * Sets the Height property for Grid 2D.
+	 * The vertical extent of the space.
+	 * @param _grid2DHeight the new Height value
+	 */
+
+	public void setGrid2DHeight(int _grid2DHeight) {
+		grid2DDimensions[1] = _grid2DHeight;
+	}
+	/**
+	 * Gets the Grid 2D property for StupidModel1.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getGrid2D() {
+		return grid2D;
+	}
+
+	/**
+	 * Sets the Grid 2D property for StupidModel1.
+	 * 
+	 * @param _grid2D the new Grid 2D value
+	 */
+
+	public void setGrid2D(org.ascape.model.Scape _grid2D) {
+		grid2D = _grid2D;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "StupidModel1 " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/StupidModel1PartFactory.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/StupidModel1PartFactory.java
new file mode 100644
index 0000000..7bddb07
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid1/StupidModel1PartFactory.java
@@ -0,0 +1,18 @@
+package org.metaabm.examples.stupid1;
+public class StupidModel1PartFactory
+		extends
+			org.eclipse.amp.escape.ascape.adapt.AscapePartFactory {
+
+	protected org.eclipse.gef.EditPart getPartForElement(Object model) {
+
+		if (model instanceof Bug) {
+			return new org.metaabm.examples.stupid1.BugStyle2D();
+		}
+
+		if (model instanceof Habitat) {
+			return new org.metaabm.examples.stupid1.HabitatStyle2D();
+		}
+
+		return super.getPartForElement(model);
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/Bug.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/Bug.java
new file mode 100644
index 0000000..7ae5d42
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/Bug.java
@@ -0,0 +1,130 @@
+package org.metaabm.examples.stupid2;
+
+/**
+ * Bug Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:47 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Bug extends org.ascape.model.CellOccupant {
+
+	/**
+	 * 
+	 */
+
+	private int size = 0;
+	/**
+	 * Constructs a new Bug.
+	 */
+
+	public Bug() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Bug clone = (Bug) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public StupidModel2 getStupidModel2() {
+		return (StupidModel2) getScape().getRoot();
+	}
+
+	/**
+	 * .
+	 */
+
+	public void intializeNonFramework() {
+
+		{
+
+			Habitat randomHabitat = (Habitat) ((org.ascape.model.space.Discrete) getStupidModel2()
+					.getGrid2D().getSpace()).findRandomAvailable();
+			if (randomHabitat != null) {
+
+				moveTo(randomHabitat);
+
+			}
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void randomMovement() {
+
+		{
+
+			Habitat nearbySpace = (Habitat) ((org.ascape.model.space.Discrete) getStupidModel2()
+					.getGrid2D().getSpace()).findRandomAvailable(
+					((org.ascape.model.CellOccupant) this).getHostCell(), null,
+					false, getStupidModel2().getBugVision());
+			if (nearbySpace != null) {
+
+				moveTo(nearbySpace);
+
+			}
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void grow() {
+
+		int growIncrementSize = getSize() + 1;
+
+		setSize(growIncrementSize);
+
+	}
+
+	/**
+	 * Gets the Size property for Bug.
+	 * @return 
+	 */
+
+	public int getSize() {
+		return size;
+	}
+
+	/**
+	 * Sets the Size property for Bug.
+	 * 
+	 * @param _size the new Size value
+	 */
+
+	public void setSize(int _size) {
+		size = _size;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Bug " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/BugStyle2D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/BugStyle2D.java
new file mode 100644
index 0000000..4025a88
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/BugStyle2D.java
@@ -0,0 +1,50 @@
+package org.metaabm.examples.stupid2;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:47 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2D extends org.eclipse.amp.agf.gef.AgentEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		Bug bugRule = (Bug) getModel();
+
+		double bugSizeRatio = bugRule.getSize() / 10.0;
+
+		double bugSizeUnit = java.lang.Math.min(bugSizeRatio, 1.0)
+
+		;
+
+		double invertBugSize = 1 - bugSizeUnit;
+
+		if (!createFigure) {
+			color = org.ascape.util.vis.ColorFeatureConcrete.create(
+					(int) (1.0 * 255), (int) (invertBugSize * 255),
+					(int) (invertBugSize * 255));
+
+		}
+		if (createFigure) {
+			figure = shapeOval();
+		}
+
+		if (!createFigure) {
+			figure.setBackgroundColor(color);
+			((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/BugStyle2D3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/BugStyle2D3DEditPart.java
new file mode 100644
index 0000000..b19c59e
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/BugStyle2D3DEditPart.java
@@ -0,0 +1,37 @@
+package org.metaabm.examples.stupid2;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:55 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2D3DEditPart extends org.eclipse.amp.agf3d.CubeEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		for (int i = 1; i <= 4; i++) {
+			setShowMarker(i, false);
+		}
+
+		Bug bugRule = (Bug) getModel();
+
+		double bugSizeRatio = bugRule.getSize() / 10.0;
+
+		double bugSizeUnit = java.lang.Math.min(bugSizeRatio, 1.0)
+
+		;
+
+		double invertBugSize = 1 - bugSizeUnit;
+
+		color = org.ascape.util.vis.ColorFeatureConcrete.create(
+				(int) (1.0 * 255), (int) (invertBugSize * 255),
+				(int) (invertBugSize * 255));
+
+		shape = getCube();
+
+		shape.setColor(color, 255);
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/BugStyle2DGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/BugStyle2DGraphics.java
new file mode 100644
index 0000000..dfa4128
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/BugStyle2DGraphics.java
@@ -0,0 +1,54 @@
+package org.metaabm.examples.stupid2;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:52 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2DGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		org.ascape.model.HostCell rootActGroupCell = (org.ascape.model.HostCell) object;
+		if (rootActGroupCell.getOccupant() instanceof Bug) {
+			Bug rootActGroup = (Bug) rootActGroupCell.getOccupant();
+			Bug bugRule = rootActGroup;
+
+			double bugSizeRatio = bugRule.getSize() / 10.0;
+
+			double bugSizeUnit = java.lang.Math.min(bugSizeRatio, 1.0)
+
+			;
+
+			double invertBugSize = 1 - bugSizeUnit;
+
+			org.eclipse.swt.graphics.Color bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_ = new org.eclipse.swt.graphics.Color(
+					org.eclipse.swt.widgets.Display.getCurrent(),
+					(int) (1.0 * 255), (int) (invertBugSize * 255),
+					(int) (invertBugSize * 255));
+
+			g
+					.setForegroundColor(bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_);
+			g
+					.setBackgroundColor(bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_);
+			shape = shape.oval;
+			if (shape == Shapes.oval) {
+				g.fillOval(0, 0, width, height);
+			} else if (shape == Shapes.marker) {
+				int d = (int) (width * .25 - 1);
+				int d2 = (int) (width * .5 - 1);
+				g.fillOval(d, d, d2, d2);
+			} else if (shape == Shapes.rectangle) {
+				g.fillRectangle(0, 0, width, height);
+			}
+
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/Habitat.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/Habitat.java
new file mode 100644
index 0000000..a82910e
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/Habitat.java
@@ -0,0 +1,54 @@
+package org.metaabm.examples.stupid2;
+
+/**
+ * Habitat Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:47 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Habitat extends org.ascape.model.HostCell {
+
+	/**
+	 * Constructs a new Habitat.
+	 */
+
+	public Habitat() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Habitat clone = (Habitat) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public StupidModel2 getStupidModel2() {
+		return (StupidModel2) getScape().getRoot();
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Habitat " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/HabitatStyle2D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/HabitatStyle2D.java
new file mode 100644
index 0000000..1550e9c
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/HabitatStyle2D.java
@@ -0,0 +1,27 @@
+package org.metaabm.examples.stupid2;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:47 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2D
+		extends
+			org.eclipse.amp.escape.ascape.gef.HostCellEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/HabitatStyle2D3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/HabitatStyle2D3DEditPart.java
new file mode 100644
index 0000000..b4097e3
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/HabitatStyle2D3DEditPart.java
@@ -0,0 +1,17 @@
+package org.metaabm.examples.stupid2;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:55 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2D3DEditPart
+		extends
+			org.eclipse.amp.agf3d.TileEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/HabitatStyle2DGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/HabitatStyle2DGraphics.java
new file mode 100644
index 0000000..b85f831
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/HabitatStyle2DGraphics.java
@@ -0,0 +1,22 @@
+package org.metaabm.examples.stupid2;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:52 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2DGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		Habitat rootActGroup = (Habitat) object;
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/StupidModel2.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/StupidModel2.java
new file mode 100644
index 0000000..8af6f2b
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/StupidModel2.java
@@ -0,0 +1,413 @@
+package org.metaabm.examples.stupid2;
+
+/**
+ * Stupid Model 2 Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:46 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class StupidModel2 extends org.ascape.model.Scape
+		implements
+			org.eclipse.amp.agf.gef.ModelFactoryProvider {
+
+	/**
+	 * The number of bugs to create.
+	 */
+
+	private int bugCount = 100;
+	/**
+	 * The number of habitats to create.
+	 */
+
+	private int habitatCount = 0;
+	/**
+	 * 
+	 */
+
+	private boolean maxBugSizeColor = false;
+	/**
+	 * 
+	 */
+
+	private int bugVision = 4;
+	/**
+	 * The size of each dimension.
+	 */
+
+	private int[] grid2DDimensions = new int[2];
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape grid2D = null;
+	/**
+	 * Constructs a new Stupid Model 2.
+	 */
+
+	public StupidModel2() {
+		createUniqueID();
+		setGrid2DWidth(100);
+		setGrid2DHeight(100);
+	}
+
+	org.eclipse.gef.EditPartFactory factory;
+
+	org.eclipse.gef.EditPartFactory treeFactory;
+
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			StupidModel2 clone = (StupidModel2) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape bugList = null;
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape habitatList = null;
+
+	/**
+	 * Gets the Bug property for Stupid Model 2.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getBug() {
+		return bugList;
+	}
+
+	/**
+	 * Sets the Bug property for Stupid Model 2.
+	 * 
+	 * @param _bug the new Bug value
+	 */
+
+	public void setBug(org.ascape.model.Scape _bug) {
+		bugList = _bug;
+	}
+	/**
+	 * Gets the Habitat property for Stupid Model 2.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getHabitat() {
+		return habitatList;
+	}
+
+	/**
+	 * Sets the Habitat property for Stupid Model 2.
+	 * 
+	 * @param _habitat the new Habitat value
+	 */
+
+	public void setHabitat(org.ascape.model.Scape _habitat) {
+		habitatList = _habitat;
+	}
+
+	/**
+	 * Creates the members of Stupid Model 2. 
+	 */
+	public void createScape() {
+		super.createScape();
+		setName(toString());
+
+		Bug bugProto = new Bug();
+		bugList = new org.ascape.model.Scape();
+		bugList.setName("Bug");
+		bugList.setPrototypeAgent(bugProto);
+		bugList.setExecutionOrder(org.ascape.model.Scape.RULE_ORDER);
+
+		grid2D = new org.ascape.model.Scape(
+				new org.ascape.model.space.Array2DMoore());
+		grid2D.setPrototypeAgent(new Habitat());
+		grid2D.setExtent(new org.ascape.model.space.Coordinate2DDiscrete(
+				getGrid2DDimensions()));
+		grid2D.setName("Fill Grid");
+		((org.ascape.model.space.CollectionSpace) grid2D.getSpace())
+				.setPeriodic(true);
+		add(grid2D);
+		org.ascape.model.Scape habitatList = grid2D;
+
+		add(bugList);
+
+		bugProto.setHostScape(grid2D);
+		grid2D.getRules().clear();
+
+		bugList.addStatCollector(new org.ascape.util.data.StatCollectorCSA(
+				"Bug Population") {
+			private static final long serialVersionUID = 684614444640209893L;
+
+			@SuppressWarnings("unused")
+			public final boolean meetsCondition(Object object) {
+				return true;
+			}
+		});
+
+		bugList.addInitialRule(new org.ascape.model.rule.Rule("Initialize") {
+			private static final long serialVersionUID = 6846144446402098982L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid2.Bug) a).intializeNonFramework();
+			}
+		});
+		bugList.addRule(new org.ascape.model.rule.Rule("Random Movement") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid2.Bug) a).randomMovement();
+			}
+		});
+		bugList.addRule(new org.ascape.model.rule.Rule("Grow") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid2.Bug) a).grow();
+			}
+		});
+
+	}
+
+	/**
+	 * Creates UI views for Stupid Model 2.
+	 */
+	public void createGraphicViews() {
+		super.createGraphicViews();
+		org.ascape.view.vis.ChartView chart = new org.ascape.view.vis.ChartView();
+		org.eclipse.draw2d.Graphics dummyGraphics = new org.eclipse.draw2d.SWTGraphics(
+				new org.eclipse.swt.graphics.GC(
+						new org.eclipse.swt.graphics.Image(
+								org.eclipse.ui.PlatformUI.getWorkbench()
+										.getDisplay(), 10, 10)));
+
+		org.ascape.model.Scape bugScape = new StupidModel2();
+		bugScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Bug bug = new Bug() {
+			public void requestUpdate() {
+			}
+		};
+		bugScape.add(bug);
+
+		org.ascape.model.HostCell bugHost = new org.ascape.model.HostCell() {
+			public void requestUpdate() {
+			}
+		};
+		bugHost.setOccupant((org.ascape.model.CellOccupant) bug);
+		org.eclipse.swt.graphics.Color bugLastColor = dummyGraphics
+				.getForegroundColor();
+		org.eclipse.swt.graphics.Color bugNewColor = dummyGraphics
+				.getForegroundColor();
+
+		BugStyle2DGraphics bugStyle2D = new BugStyle2DGraphics();
+
+		org.ascape.model.Scape habitatScape = new StupidModel2();
+		habitatScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Habitat habitat = new Habitat() {
+			public void requestUpdate() {
+			}
+		};
+		habitatScape.add(habitat);
+
+		HabitatStyle2DGraphics habitatStyle2D = new HabitatStyle2DGraphics();
+
+		addView(chart);
+		addView(new org.ascape.view.vis.GEFView());
+	}
+
+	public void scapeSetup(org.ascape.model.event.ScapeEvent scapeEvent) {
+		//Set the size of the scape populations, e.g. for mutable scapes that need to have their size reset
+
+		bugList.setSize(bugCount);
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartFactory() {
+		if (factory == null) {
+			factory = new StupidModel2PartFactory();
+		}
+		return factory;
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartTreeFactory() {
+		if (treeFactory == null) {
+			treeFactory = new org.eclipse.amp.escape.ascape.adapt.AscapePartTreeFactory();
+		}
+		return treeFactory;
+	}
+
+	public static void main(String[] args) {
+		(new org.ascape.runtime.NonGraphicRunner())
+				.openInstance("org.metaabm.examples.stupid2.StupidModel2");
+	}
+
+	/**
+	 * Gets the Bug Count property for Stupid Model 2.
+	 * @return The number of bugs to create.
+	 */
+
+	public int getBugCount() {
+		return bugCount;
+	}
+
+	/**
+	 * Sets the Bug Count property for Stupid Model 2.
+	 * The number of bugs to create.
+	 * @param _bugCount the new Bug Count value
+	 */
+
+	public void setBugCount(int _bugCount) {
+		bugCount = _bugCount;
+	}
+	/**
+	 * Gets the Habitat Count property for Stupid Model 2.
+	 * @return The number of habitats to create.
+	 */
+
+	public int getHabitatCount() {
+		return habitatCount;
+	}
+
+	/**
+	 * Sets the Habitat Count property for Stupid Model 2.
+	 * The number of habitats to create.
+	 * @param _habitatCount the new Habitat Count value
+	 */
+
+	public void setHabitatCount(int _habitatCount) {
+		habitatCount = _habitatCount;
+	}
+	/**
+	 * Gets the Max Bug Size Color property for Stupid Model 2.
+	 * @return 
+	 */
+
+	public boolean isMaxBugSizeColor() {
+		return maxBugSizeColor;
+	}
+
+	/**
+	 * Sets the Max Bug Size Color property for Stupid Model 2.
+	 * 
+	 * @param _maxBugSizeColor the new Max Bug Size Color value
+	 */
+
+	public void setMaxBugSizeColor(boolean _maxBugSizeColor) {
+		maxBugSizeColor = _maxBugSizeColor;
+	}
+	/**
+	 * Gets the Bug Vision property for Stupid Model 2.
+	 * @return 
+	 */
+
+	public int getBugVision() {
+		return bugVision;
+	}
+
+	/**
+	 * Sets the Bug Vision property for Stupid Model 2.
+	 * 
+	 * @param _bugVision the new Bug Vision value
+	 */
+
+	public void setBugVision(int _bugVision) {
+		bugVision = _bugVision;
+	}
+	/**
+	 * Gets the Dimensions property for Grid 2D.
+	 * @return The size of each dimension.
+	 */
+
+	public int[] getGrid2DDimensions() {
+		return grid2DDimensions;
+	}
+
+	/**
+	 * Sets the Dimensions property for Grid 2D.
+	 * The size of each dimension.
+	 * @param _grid2DDimensions the new Dimensions value
+	 */
+
+	public void setGrid2DDimensions(int[] _grid2DDimensions) {
+		grid2DDimensions = _grid2DDimensions;
+	}
+	/**
+	 * Gets the Width property for Grid 2D.
+	 * @return The horizontal extent of the space.
+	 */
+
+	public int getGrid2DWidth() {
+		return grid2DDimensions[0];
+	}
+
+	/**
+	 * Sets the Width property for Grid 2D.
+	 * The horizontal extent of the space.
+	 * @param _grid2DWidth the new Width value
+	 */
+
+	public void setGrid2DWidth(int _grid2DWidth) {
+		grid2DDimensions[0] = _grid2DWidth;
+	}
+	/**
+	 * Gets the Height property for Grid 2D.
+	 * @return The vertical extent of the space.
+	 */
+
+	public int getGrid2DHeight() {
+		return grid2DDimensions[1];
+	}
+
+	/**
+	 * Sets the Height property for Grid 2D.
+	 * The vertical extent of the space.
+	 * @param _grid2DHeight the new Height value
+	 */
+
+	public void setGrid2DHeight(int _grid2DHeight) {
+		grid2DDimensions[1] = _grid2DHeight;
+	}
+	/**
+	 * Gets the Grid 2D property for Stupid Model 2.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getGrid2D() {
+		return grid2D;
+	}
+
+	/**
+	 * Sets the Grid 2D property for Stupid Model 2.
+	 * 
+	 * @param _grid2D the new Grid 2D value
+	 */
+
+	public void setGrid2D(org.ascape.model.Scape _grid2D) {
+		grid2D = _grid2D;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Stupid Model 2 " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/StupidModel2PartFactory.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/StupidModel2PartFactory.java
new file mode 100644
index 0000000..a11f826
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid2/StupidModel2PartFactory.java
@@ -0,0 +1,18 @@
+package org.metaabm.examples.stupid2;
+public class StupidModel2PartFactory
+		extends
+			org.eclipse.amp.escape.ascape.adapt.AscapePartFactory {
+
+	protected org.eclipse.gef.EditPart getPartForElement(Object model) {
+
+		if (model instanceof Bug) {
+			return new org.metaabm.examples.stupid2.BugStyle2D();
+		}
+
+		if (model instanceof Habitat) {
+			return new org.metaabm.examples.stupid2.HabitatStyle2D();
+		}
+
+		return super.getPartForElement(model);
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/Bug.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/Bug.java
new file mode 100644
index 0000000..aaaea4d
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/Bug.java
@@ -0,0 +1,130 @@
+package org.metaabm.examples.stupid3;
+
+/**
+ * Bug Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:46 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Bug extends org.ascape.model.CellOccupant {
+
+	/**
+	 * 
+	 */
+
+	private int size = 0;
+	/**
+	 * Constructs a new Bug.
+	 */
+
+	public Bug() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Bug clone = (Bug) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public StupidModel3 getStupidModel3() {
+		return (StupidModel3) getScape().getRoot();
+	}
+
+	/**
+	 * .
+	 */
+
+	public void intializeNonFramework() {
+
+		{
+
+			Habitat randomHabitat = (Habitat) ((org.ascape.model.space.Discrete) getStupidModel3()
+					.getGrid2D().getSpace()).findRandomAvailable();
+			if (randomHabitat != null) {
+
+				moveTo(randomHabitat);
+
+			}
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void randomMovement() {
+
+		{
+
+			Habitat nearbySpace = (Habitat) ((org.ascape.model.space.Discrete) getStupidModel3()
+					.getGrid2D().getSpace()).findRandomAvailable(
+					((org.ascape.model.CellOccupant) this).getHostCell(), null,
+					false, getStupidModel3().getBugVision());
+			if (nearbySpace != null) {
+
+				moveTo(nearbySpace);
+
+			}
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void grow() {
+
+		int growIncrementSize = getSize() + 1;
+
+		setSize(growIncrementSize);
+
+	}
+
+	/**
+	 * Gets the Size property for Bug.
+	 * @return 
+	 */
+
+	public int getSize() {
+		return size;
+	}
+
+	/**
+	 * Sets the Size property for Bug.
+	 * 
+	 * @param _size the new Size value
+	 */
+
+	public void setSize(int _size) {
+		size = _size;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Bug " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/BugStyle2D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/BugStyle2D.java
new file mode 100644
index 0000000..6d2ef1b
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/BugStyle2D.java
@@ -0,0 +1,50 @@
+package org.metaabm.examples.stupid3;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:46 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2D extends org.eclipse.amp.agf.gef.AgentEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		Bug bugRule = (Bug) getModel();
+
+		double bugSizeRatio = bugRule.getSize() / 10.0;
+
+		double bugSizeUnit = java.lang.Math.min(bugSizeRatio, 1.0)
+
+		;
+
+		double invertBugSize = 1 - bugSizeUnit;
+
+		if (!createFigure) {
+			color = org.ascape.util.vis.ColorFeatureConcrete.create(
+					(int) (1.0 * 255), (int) (invertBugSize * 255),
+					(int) (invertBugSize * 255));
+
+		}
+		if (createFigure) {
+			figure = shapeOval();
+		}
+
+		if (!createFigure) {
+			figure.setBackgroundColor(color);
+			((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/BugStyle2D3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/BugStyle2D3DEditPart.java
new file mode 100644
index 0000000..ab95273
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/BugStyle2D3DEditPart.java
@@ -0,0 +1,37 @@
+package org.metaabm.examples.stupid3;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:55 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2D3DEditPart extends org.eclipse.amp.agf3d.CubeEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		for (int i = 1; i <= 4; i++) {
+			setShowMarker(i, false);
+		}
+
+		Bug bugRule = (Bug) getModel();
+
+		double bugSizeRatio = bugRule.getSize() / 10.0;
+
+		double bugSizeUnit = java.lang.Math.min(bugSizeRatio, 1.0)
+
+		;
+
+		double invertBugSize = 1 - bugSizeUnit;
+
+		color = org.ascape.util.vis.ColorFeatureConcrete.create(
+				(int) (1.0 * 255), (int) (invertBugSize * 255),
+				(int) (invertBugSize * 255));
+
+		shape = getCube();
+
+		shape.setColor(color, 255);
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/BugStyle2DGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/BugStyle2DGraphics.java
new file mode 100644
index 0000000..075fb68
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/BugStyle2DGraphics.java
@@ -0,0 +1,54 @@
+package org.metaabm.examples.stupid3;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:52 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2DGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		org.ascape.model.HostCell rootActGroupCell = (org.ascape.model.HostCell) object;
+		if (rootActGroupCell.getOccupant() instanceof Bug) {
+			Bug rootActGroup = (Bug) rootActGroupCell.getOccupant();
+			Bug bugRule = rootActGroup;
+
+			double bugSizeRatio = bugRule.getSize() / 10.0;
+
+			double bugSizeUnit = java.lang.Math.min(bugSizeRatio, 1.0)
+
+			;
+
+			double invertBugSize = 1 - bugSizeUnit;
+
+			org.eclipse.swt.graphics.Color bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_ = new org.eclipse.swt.graphics.Color(
+					org.eclipse.swt.widgets.Display.getCurrent(),
+					(int) (1.0 * 255), (int) (invertBugSize * 255),
+					(int) (invertBugSize * 255));
+
+			g
+					.setForegroundColor(bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_);
+			g
+					.setBackgroundColor(bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_);
+			shape = shape.oval;
+			if (shape == Shapes.oval) {
+				g.fillOval(0, 0, width, height);
+			} else if (shape == Shapes.marker) {
+				int d = (int) (width * .25 - 1);
+				int d2 = (int) (width * .5 - 1);
+				g.fillOval(d, d, d2, d2);
+			} else if (shape == Shapes.rectangle) {
+				g.fillRectangle(0, 0, width, height);
+			}
+
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/Habitat.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/Habitat.java
new file mode 100644
index 0000000..dd2f20c
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/Habitat.java
@@ -0,0 +1,117 @@
+package org.metaabm.examples.stupid3;
+
+/**
+ * Habitat Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:46 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Habitat extends org.ascape.model.HostCell {
+
+	/**
+	 * 
+	 */
+
+	private double foodAvailability = 0.0;
+	/**
+	 * 
+	 */
+
+	private double maximumFoodProductionRate = 0.01;
+	/**
+	 * Constructs a new Habitat.
+	 */
+
+	public Habitat() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Habitat clone = (Habitat) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public StupidModel3 getStupidModel3() {
+		return (StupidModel3) getScape().getRoot();
+	}
+
+	/**
+	 * .
+	 */
+
+	public void determindFoodProduction() {
+
+		double calculateFoodProductionRate = randomInRange(0,
+				getMaximumFoodProductionRate());
+
+		double newFoodProductionValue = getFoodAvailability()
+				+ calculateFoodProductionRate;
+
+		setFoodAvailability(newFoodProductionValue);
+
+	}
+
+	/**
+	 * Gets the FoodAvailability property for Habitat.
+	 * @return 
+	 */
+
+	public double getFoodAvailability() {
+		return foodAvailability;
+	}
+
+	/**
+	 * Sets the FoodAvailability property for Habitat.
+	 * 
+	 * @param _foodAvailability the new FoodAvailability value
+	 */
+
+	public void setFoodAvailability(double _foodAvailability) {
+		foodAvailability = _foodAvailability;
+	}
+	/**
+	 * Gets the MaximumFoodProductionRate property for Habitat.
+	 * @return 
+	 */
+
+	public double getMaximumFoodProductionRate() {
+		return maximumFoodProductionRate;
+	}
+
+	/**
+	 * Sets the MaximumFoodProductionRate property for Habitat.
+	 * 
+	 * @param _maximumFoodProductionRate the new MaximumFoodProductionRate value
+	 */
+
+	public void setMaximumFoodProductionRate(double _maximumFoodProductionRate) {
+		maximumFoodProductionRate = _maximumFoodProductionRate;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Habitat " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/HabitatStyle2D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/HabitatStyle2D.java
new file mode 100644
index 0000000..d41948f
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/HabitatStyle2D.java
@@ -0,0 +1,42 @@
+package org.metaabm.examples.stupid3;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:46 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2D
+		extends
+			org.eclipse.amp.escape.ascape.gef.HostCellEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		Habitat habitatRule = (Habitat) getModel();
+
+		if (!createFigure) {
+			color = org.eclipse.draw2d.ColorConstants.black;
+
+		}
+		if (createFigure) {
+			figure = shapeRectangle();
+		}
+
+		if (!createFigure) {
+			figure.setBackgroundColor(color);
+			((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/HabitatStyle2D3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/HabitatStyle2D3DEditPart.java
new file mode 100644
index 0000000..d985042
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/HabitatStyle2D3DEditPart.java
@@ -0,0 +1,25 @@
+package org.metaabm.examples.stupid3;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:55 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2D3DEditPart
+		extends
+			org.eclipse.amp.agf3d.TileEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		Habitat habitatRule = (Habitat) getModel();
+
+		color = org.eclipse.draw2d.ColorConstants.black;
+
+		shape = getCube();
+
+		shape.setColor(color, 255);
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/HabitatStyle2DGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/HabitatStyle2DGraphics.java
new file mode 100644
index 0000000..c0a3aaf
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/HabitatStyle2DGraphics.java
@@ -0,0 +1,38 @@
+package org.metaabm.examples.stupid3;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:52 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2DGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		Habitat rootActGroup = (Habitat) object;
+		Habitat habitatRule = rootActGroup;
+
+		org.eclipse.swt.graphics.Color habitatRuleColorBlack = org.eclipse.draw2d.ColorConstants.black;
+
+		g.setForegroundColor(habitatRuleColorBlack);
+		g.setBackgroundColor(habitatRuleColorBlack);
+		shape = shape.rectangle;
+		if (shape == Shapes.oval) {
+			g.fillOval(0, 0, width, height);
+		} else if (shape == Shapes.marker) {
+			int d = (int) (width * .25 - 1);
+			int d2 = (int) (width * .5 - 1);
+			g.fillOval(d, d, d2, d2);
+		} else if (shape == Shapes.rectangle) {
+			g.fillRectangle(0, 0, width, height);
+		}
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/StupidModel3.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/StupidModel3.java
new file mode 100644
index 0000000..1eaff74
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/StupidModel3.java
@@ -0,0 +1,397 @@
+package org.metaabm.examples.stupid3;
+
+/**
+ * Stupid Model 3 Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:45 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class StupidModel3 extends org.ascape.model.Scape
+		implements
+			org.eclipse.amp.agf.gef.ModelFactoryProvider {
+
+	/**
+	 * The number of bugs to create.
+	 */
+
+	private int bugCount = 100;
+	/**
+	 * The number of habitats to create.
+	 */
+
+	private int habitatCount = 0;
+	/**
+	 * 
+	 */
+
+	private int bugVision = 4;
+	/**
+	 * The size of each dimension.
+	 */
+
+	private int[] grid2DDimensions = new int[2];
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape grid2D = null;
+	/**
+	 * Constructs a new Stupid Model 3.
+	 */
+
+	public StupidModel3() {
+		createUniqueID();
+		setGrid2DWidth(100);
+		setGrid2DHeight(100);
+	}
+
+	org.eclipse.gef.EditPartFactory factory;
+
+	org.eclipse.gef.EditPartFactory treeFactory;
+
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			StupidModel3 clone = (StupidModel3) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape bugList = null;
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape habitatList = null;
+
+	/**
+	 * Gets the Bug property for Stupid Model 3.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getBug() {
+		return bugList;
+	}
+
+	/**
+	 * Sets the Bug property for Stupid Model 3.
+	 * 
+	 * @param _bug the new Bug value
+	 */
+
+	public void setBug(org.ascape.model.Scape _bug) {
+		bugList = _bug;
+	}
+	/**
+	 * Gets the Habitat property for Stupid Model 3.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getHabitat() {
+		return habitatList;
+	}
+
+	/**
+	 * Sets the Habitat property for Stupid Model 3.
+	 * 
+	 * @param _habitat the new Habitat value
+	 */
+
+	public void setHabitat(org.ascape.model.Scape _habitat) {
+		habitatList = _habitat;
+	}
+
+	/**
+	 * Creates the members of Stupid Model 3. 
+	 */
+	public void createScape() {
+		super.createScape();
+		setName(toString());
+
+		Bug bugProto = new Bug();
+		bugList = new org.ascape.model.Scape();
+		bugList.setName("Bug");
+		bugList.setPrototypeAgent(bugProto);
+		bugList.setExecutionOrder(org.ascape.model.Scape.RULE_ORDER);
+
+		grid2D = new org.ascape.model.Scape(
+				new org.ascape.model.space.Array2DMoore());
+		grid2D.setPrototypeAgent(new Habitat());
+		grid2D.setExtent(new org.ascape.model.space.Coordinate2DDiscrete(
+				getGrid2DDimensions()));
+		grid2D.setName("Fill Grid");
+		((org.ascape.model.space.CollectionSpace) grid2D.getSpace())
+				.setPeriodic(true);
+		add(grid2D);
+		org.ascape.model.Scape habitatList = grid2D;
+
+		add(bugList);
+
+		bugProto.setHostScape(grid2D);
+
+		bugList.addStatCollector(new org.ascape.util.data.StatCollectorCSA(
+				"Bug Population") {
+			private static final long serialVersionUID = 684614444640209893L;
+
+			@SuppressWarnings("unused")
+			public final boolean meetsCondition(Object object) {
+				return true;
+			}
+		});
+
+		bugList.addInitialRule(new org.ascape.model.rule.Rule("Initialize") {
+			private static final long serialVersionUID = 6846144446402098982L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid3.Bug) a).intializeNonFramework();
+			}
+		});
+		bugList.addRule(new org.ascape.model.rule.Rule("Random Movement") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid3.Bug) a).randomMovement();
+			}
+		});
+		bugList.addRule(new org.ascape.model.rule.Rule("Grow") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid3.Bug) a).grow();
+			}
+		});
+		habitatList.addRule(new org.ascape.model.rule.Rule(
+				"determindFoodProduction") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid3.Habitat) a)
+						.determindFoodProduction();
+			}
+		});
+
+	}
+
+	/**
+	 * Creates UI views for Stupid Model 3.
+	 */
+	public void createGraphicViews() {
+		super.createGraphicViews();
+		org.ascape.view.vis.ChartView chart = new org.ascape.view.vis.ChartView();
+		org.eclipse.draw2d.Graphics dummyGraphics = new org.eclipse.draw2d.SWTGraphics(
+				new org.eclipse.swt.graphics.GC(
+						new org.eclipse.swt.graphics.Image(
+								org.eclipse.ui.PlatformUI.getWorkbench()
+										.getDisplay(), 10, 10)));
+
+		org.ascape.model.Scape bugScape = new StupidModel3();
+		bugScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Bug bug = new Bug() {
+			public void requestUpdate() {
+			}
+		};
+		bugScape.add(bug);
+
+		org.ascape.model.HostCell bugHost = new org.ascape.model.HostCell() {
+			public void requestUpdate() {
+			}
+		};
+		bugHost.setOccupant((org.ascape.model.CellOccupant) bug);
+		org.eclipse.swt.graphics.Color bugLastColor = dummyGraphics
+				.getForegroundColor();
+		org.eclipse.swt.graphics.Color bugNewColor = dummyGraphics
+				.getForegroundColor();
+
+		BugStyle2DGraphics bugStyle2D = new BugStyle2DGraphics();
+
+		org.ascape.model.Scape habitatScape = new StupidModel3();
+		habitatScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Habitat habitat = new Habitat() {
+			public void requestUpdate() {
+			}
+		};
+		habitatScape.add(habitat);
+
+		HabitatStyle2DGraphics habitatStyle2D = new HabitatStyle2DGraphics();
+
+		addView(chart);
+		addView(new org.ascape.view.vis.GEFView());
+	}
+
+	public void scapeSetup(org.ascape.model.event.ScapeEvent scapeEvent) {
+		//Set the size of the scape populations, e.g. for mutable scapes that need to have their size reset
+
+		bugList.setSize(bugCount);
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartFactory() {
+		if (factory == null) {
+			factory = new StupidModel3PartFactory();
+		}
+		return factory;
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartTreeFactory() {
+		if (treeFactory == null) {
+			treeFactory = new org.eclipse.amp.escape.ascape.adapt.AscapePartTreeFactory();
+		}
+		return treeFactory;
+	}
+
+	public static void main(String[] args) {
+		(new org.ascape.runtime.NonGraphicRunner())
+				.openInstance("org.metaabm.examples.stupid3.StupidModel3");
+	}
+
+	/**
+	 * Gets the Bug Count property for Stupid Model 3.
+	 * @return The number of bugs to create.
+	 */
+
+	public int getBugCount() {
+		return bugCount;
+	}
+
+	/**
+	 * Sets the Bug Count property for Stupid Model 3.
+	 * The number of bugs to create.
+	 * @param _bugCount the new Bug Count value
+	 */
+
+	public void setBugCount(int _bugCount) {
+		bugCount = _bugCount;
+	}
+	/**
+	 * Gets the Habitat Count property for Stupid Model 3.
+	 * @return The number of habitats to create.
+	 */
+
+	public int getHabitatCount() {
+		return habitatCount;
+	}
+
+	/**
+	 * Sets the Habitat Count property for Stupid Model 3.
+	 * The number of habitats to create.
+	 * @param _habitatCount the new Habitat Count value
+	 */
+
+	public void setHabitatCount(int _habitatCount) {
+		habitatCount = _habitatCount;
+	}
+	/**
+	 * Gets the Bug Vision property for Stupid Model 3.
+	 * @return 
+	 */
+
+	public int getBugVision() {
+		return bugVision;
+	}
+
+	/**
+	 * Sets the Bug Vision property for Stupid Model 3.
+	 * 
+	 * @param _bugVision the new Bug Vision value
+	 */
+
+	public void setBugVision(int _bugVision) {
+		bugVision = _bugVision;
+	}
+	/**
+	 * Gets the Dimensions property for Grid 2D.
+	 * @return The size of each dimension.
+	 */
+
+	public int[] getGrid2DDimensions() {
+		return grid2DDimensions;
+	}
+
+	/**
+	 * Sets the Dimensions property for Grid 2D.
+	 * The size of each dimension.
+	 * @param _grid2DDimensions the new Dimensions value
+	 */
+
+	public void setGrid2DDimensions(int[] _grid2DDimensions) {
+		grid2DDimensions = _grid2DDimensions;
+	}
+	/**
+	 * Gets the Width property for Grid 2D.
+	 * @return The horizontal extent of the space.
+	 */
+
+	public int getGrid2DWidth() {
+		return grid2DDimensions[0];
+	}
+
+	/**
+	 * Sets the Width property for Grid 2D.
+	 * The horizontal extent of the space.
+	 * @param _grid2DWidth the new Width value
+	 */
+
+	public void setGrid2DWidth(int _grid2DWidth) {
+		grid2DDimensions[0] = _grid2DWidth;
+	}
+	/**
+	 * Gets the Height property for Grid 2D.
+	 * @return The vertical extent of the space.
+	 */
+
+	public int getGrid2DHeight() {
+		return grid2DDimensions[1];
+	}
+
+	/**
+	 * Sets the Height property for Grid 2D.
+	 * The vertical extent of the space.
+	 * @param _grid2DHeight the new Height value
+	 */
+
+	public void setGrid2DHeight(int _grid2DHeight) {
+		grid2DDimensions[1] = _grid2DHeight;
+	}
+	/**
+	 * Gets the Grid 2D property for Stupid Model 3.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getGrid2D() {
+		return grid2D;
+	}
+
+	/**
+	 * Sets the Grid 2D property for Stupid Model 3.
+	 * 
+	 * @param _grid2D the new Grid 2D value
+	 */
+
+	public void setGrid2D(org.ascape.model.Scape _grid2D) {
+		grid2D = _grid2D;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Stupid Model 3 " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/StupidModel3PartFactory.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/StupidModel3PartFactory.java
new file mode 100644
index 0000000..fbcf2ae
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid3/StupidModel3PartFactory.java
@@ -0,0 +1,18 @@
+package org.metaabm.examples.stupid3;
+public class StupidModel3PartFactory
+		extends
+			org.eclipse.amp.escape.ascape.adapt.AscapePartFactory {
+
+	protected org.eclipse.gef.EditPart getPartForElement(Object model) {
+
+		if (model instanceof Bug) {
+			return new org.metaabm.examples.stupid3.BugStyle2D();
+		}
+
+		if (model instanceof Habitat) {
+			return new org.metaabm.examples.stupid3.HabitatStyle2D();
+		}
+
+		return super.getPartForElement(model);
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/Bug.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/Bug.java
new file mode 100644
index 0000000..1638b64
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/Bug.java
@@ -0,0 +1,208 @@
+package org.metaabm.examples.stupid5;
+
+/**
+ * Bug Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:44 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Bug extends org.ascape.model.CellOccupant {
+
+	/**
+	 * 
+	 */
+
+	private double size = 0.0;
+	/**
+	 * 
+	 */
+
+	private double consumption = 0.0;
+	/**
+	 * 
+	 */
+
+	private double maxConsumption = 0.2;
+	/**
+	 * Constructs a new Bug.
+	 */
+
+	public Bug() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Bug clone = (Bug) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public StupidModel5 getStupidModel5() {
+		return (StupidModel5) getScape().getRoot();
+	}
+
+	/**
+	 * .
+	 */
+
+	public void intializeNonFramework() {
+
+		{
+
+			Habitat randomHabitat = (Habitat) ((org.ascape.model.space.Discrete) getStupidModel5()
+					.getGrid2D().getSpace()).findRandomAvailable();
+			if (randomHabitat != null) {
+
+				moveTo(randomHabitat);
+
+			}
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void randomMovement() {
+
+		{
+			org.ascape.util.Conditional nearbySpaceCondition = new org.ascape.util.Conditional() {
+				private static final long serialVersionUID = 6846144446402098985L;
+
+				public boolean meetsCondition(Object nearbySpaceCell) {
+					nearbySpaceCell = ((org.ascape.model.HostCell) nearbySpaceCell)
+							.getOccupant();
+					if (nearbySpaceCell instanceof Bug) {
+						Bug nearbySpace = (Bug) nearbySpaceCell;
+						return true;
+					} else {
+						return false;
+					}
+				}
+			};
+
+			Bug nearbySpace = null;
+			org.ascape.model.space.Location nearbySpaceLocation = ((org.ascape.model.space.Discrete) getStupidModel5()
+					.getGrid2D().getSpace()).findRandomAvailable(
+					((org.ascape.model.CellOccupant) this).getHostCell(),
+					nearbySpaceCondition, false, getStupidModel5()
+							.getBugVision());
+			if (nearbySpaceLocation != null) {
+				nearbySpace = (Bug) ((org.ascape.model.HostCell) nearbySpaceLocation)
+						.getOccupant();
+			}
+			if (nearbySpace != null) {
+
+				moveTo(((org.ascape.model.CellOccupant) nearbySpace)
+						.getHostCell());
+
+			}
+
+		}
+
+	}
+	/**
+	 * .
+	 */
+
+	public void grow() {
+
+		Habitat habitat = (Habitat) getHostCell();
+		double availability = habitat.getFoodAvailability();
+		double consumption = availability < getMaxConsumption()
+				? availability
+				: getMaxConsumption();
+		setSize(getSize() + consumption);
+		habitat.setFoodAvailability(availability - consumption);
+
+	}
+	/**
+	 * .
+	 */
+
+	public void consumeFood() {
+
+	}
+
+	/**
+	 * Gets the Size property for Bug.
+	 * @return 
+	 */
+
+	public double getSize() {
+		return size;
+	}
+
+	/**
+	 * Sets the Size property for Bug.
+	 * 
+	 * @param _size the new Size value
+	 */
+
+	public void setSize(double _size) {
+		size = _size;
+	}
+	/**
+	 * Gets the Consumption property for Bug.
+	 * @return 
+	 */
+
+	public double getConsumption() {
+		return consumption;
+	}
+
+	/**
+	 * Sets the Consumption property for Bug.
+	 * 
+	 * @param _consumption the new Consumption value
+	 */
+
+	public void setConsumption(double _consumption) {
+		consumption = _consumption;
+	}
+	/**
+	 * Gets the Max Consumption property for Bug.
+	 * @return 
+	 */
+
+	public double getMaxConsumption() {
+		return maxConsumption;
+	}
+
+	/**
+	 * Sets the Max Consumption property for Bug.
+	 * 
+	 * @param _maxConsumption the new Max Consumption value
+	 */
+
+	public void setMaxConsumption(double _maxConsumption) {
+		maxConsumption = _maxConsumption;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Bug " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/BugStyle2D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/BugStyle2D.java
new file mode 100644
index 0000000..9574199
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/BugStyle2D.java
@@ -0,0 +1,50 @@
+package org.metaabm.examples.stupid5;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:45 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2D extends org.eclipse.amp.agf.gef.AgentEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		Bug bugRule = (Bug) getModel();
+
+		double bugSizeRatio = bugRule.getSize() / 10.0;
+
+		double bugSizeUnit = java.lang.Math.min(bugSizeRatio, 1.0)
+
+		;
+
+		double invertBugSize = 1 - bugSizeUnit;
+
+		if (!createFigure) {
+			color = org.ascape.util.vis.ColorFeatureConcrete.create(
+					(int) (1.0 * 255), (int) (invertBugSize * 255),
+					(int) (invertBugSize * 255));
+
+		}
+		if (createFigure) {
+			figure = shapeOval();
+		}
+
+		if (!createFigure) {
+			figure.setBackgroundColor(color);
+			((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/BugStyle2D3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/BugStyle2D3DEditPart.java
new file mode 100644
index 0000000..cf63b56
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/BugStyle2D3DEditPart.java
@@ -0,0 +1,37 @@
+package org.metaabm.examples.stupid5;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:55 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2D3DEditPart extends org.eclipse.amp.agf3d.CubeEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		for (int i = 1; i <= 4; i++) {
+			setShowMarker(i, false);
+		}
+
+		Bug bugRule = (Bug) getModel();
+
+		double bugSizeRatio = bugRule.getSize() / 10.0;
+
+		double bugSizeUnit = java.lang.Math.min(bugSizeRatio, 1.0)
+
+		;
+
+		double invertBugSize = 1 - bugSizeUnit;
+
+		color = org.ascape.util.vis.ColorFeatureConcrete.create(
+				(int) (1.0 * 255), (int) (invertBugSize * 255),
+				(int) (invertBugSize * 255));
+
+		shape = getCube();
+
+		shape.setColor(color, 255);
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/BugStyle2DGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/BugStyle2DGraphics.java
new file mode 100644
index 0000000..af5572f
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/BugStyle2DGraphics.java
@@ -0,0 +1,54 @@
+package org.metaabm.examples.stupid5;
+
+/**
+ * Bug Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:51 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class BugStyle2DGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		org.ascape.model.HostCell rootActGroupCell = (org.ascape.model.HostCell) object;
+		if (rootActGroupCell.getOccupant() instanceof Bug) {
+			Bug rootActGroup = (Bug) rootActGroupCell.getOccupant();
+			Bug bugRule = rootActGroup;
+
+			double bugSizeRatio = bugRule.getSize() / 10.0;
+
+			double bugSizeUnit = java.lang.Math.min(bugSizeRatio, 1.0)
+
+			;
+
+			double invertBugSize = 1 - bugSizeUnit;
+
+			org.eclipse.swt.graphics.Color bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_ = new org.eclipse.swt.graphics.Color(
+					org.eclipse.swt.widgets.Display.getCurrent(),
+					(int) (1.0 * 255), (int) (invertBugSize * 255),
+					(int) (invertBugSize * 255));
+
+			g
+					.setForegroundColor(bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_);
+			g
+					.setBackgroundColor(bugRuleColorRGB_BugRuleMinimum_BugSizeRatioLiteral1pt0_Literal1pt0Literal1pt0_);
+			shape = shape.oval;
+			if (shape == Shapes.oval) {
+				g.fillOval(0, 0, width, height);
+			} else if (shape == Shapes.marker) {
+				int d = (int) (width * .25 - 1);
+				int d2 = (int) (width * .5 - 1);
+				g.fillOval(d, d, d2, d2);
+			} else if (shape == Shapes.rectangle) {
+				g.fillRectangle(0, 0, width, height);
+			}
+
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/Habitat.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/Habitat.java
new file mode 100644
index 0000000..6cc9294
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/Habitat.java
@@ -0,0 +1,117 @@
+package org.metaabm.examples.stupid5;
+
+/**
+ * Habitat Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:45 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class Habitat extends org.ascape.model.HostCell {
+
+	/**
+	 * 
+	 */
+
+	private double foodAvailability = 0.0;
+	/**
+	 * 
+	 */
+
+	private double maximumFoodProductionRate = 0.5;
+	/**
+	 * Constructs a new Habitat.
+	 */
+
+	public Habitat() {
+		createUniqueID();
+	}
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			Habitat clone = (Habitat) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	public StupidModel5 getStupidModel5() {
+		return (StupidModel5) getScape().getRoot();
+	}
+
+	/**
+	 * .
+	 */
+
+	public void determindFoodProduction() {
+
+		double calculateFoodProductionRate = randomInRange(0,
+				getMaximumFoodProductionRate());
+
+		double newFoodProductionValue = getFoodAvailability()
+				+ calculateFoodProductionRate;
+
+		setFoodAvailability(newFoodProductionValue);
+
+	}
+
+	/**
+	 * Gets the FoodAvailability property for Habitat.
+	 * @return 
+	 */
+
+	public double getFoodAvailability() {
+		return foodAvailability;
+	}
+
+	/**
+	 * Sets the FoodAvailability property for Habitat.
+	 * 
+	 * @param _foodAvailability the new FoodAvailability value
+	 */
+
+	public void setFoodAvailability(double _foodAvailability) {
+		foodAvailability = _foodAvailability;
+	}
+	/**
+	 * Gets the MaximumFoodProductionRate property for Habitat.
+	 * @return 
+	 */
+
+	public double getMaximumFoodProductionRate() {
+		return maximumFoodProductionRate;
+	}
+
+	/**
+	 * Sets the MaximumFoodProductionRate property for Habitat.
+	 * 
+	 * @param _maximumFoodProductionRate the new MaximumFoodProductionRate value
+	 */
+
+	public void setMaximumFoodProductionRate(double _maximumFoodProductionRate) {
+		maximumFoodProductionRate = _maximumFoodProductionRate;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Habitat " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/HabitatStyle2D.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/HabitatStyle2D.java
new file mode 100644
index 0000000..4db9812
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/HabitatStyle2D.java
@@ -0,0 +1,42 @@
+package org.metaabm.examples.stupid5;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:45 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2D
+		extends
+			org.eclipse.amp.escape.ascape.gef.HostCellEditPart {
+
+	org.eclipse.draw2d.geometry.Dimension notShown = new org.eclipse.draw2d.geometry.Dimension(
+			0, 0);
+
+	protected org.eclipse.draw2d.IFigure buildFigure(
+			org.eclipse.draw2d.IFigure figure) {
+		org.eclipse.swt.graphics.Color color = null;
+		boolean createFigure = figure == null;
+		org.eclipse.draw2d.Shape markerFigure = null;
+		if (!createFigure) {
+			((org.eclipse.draw2d.Shape) figure).setFill(false);
+			((org.eclipse.draw2d.Shape) figure).setOutline(false);
+		}
+		Habitat habitatRule = (Habitat) getModel();
+
+		if (!createFigure) {
+			color = org.eclipse.draw2d.ColorConstants.black;
+
+		}
+		if (createFigure) {
+			figure = shapeRectangle();
+		}
+
+		if (!createFigure) {
+			figure.setBackgroundColor(color);
+			((org.eclipse.draw2d.Shape) figure).setFill(true);
+
+		}
+
+		return figure;
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/HabitatStyle2D3DEditPart.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/HabitatStyle2D3DEditPart.java
new file mode 100644
index 0000000..5d872b2
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/HabitatStyle2D3DEditPart.java
@@ -0,0 +1,25 @@
+package org.metaabm.examples.stupid5;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:55 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2D3DEditPart
+		extends
+			org.eclipse.amp.agf3d.TileEdit3DPart {
+
+	protected void updateGraphics() {
+		org.eclipse.swt.graphics.Color color = null;
+		org.eclipse.draw3d.shapes.SolidCube shape = null;
+
+		Habitat habitatRule = (Habitat) getModel();
+
+		color = org.eclipse.draw2d.ColorConstants.black;
+
+		shape = getCube();
+
+		shape.setColor(color, 255);
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/HabitatStyle2DGraphics.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/HabitatStyle2DGraphics.java
new file mode 100644
index 0000000..16cdac2
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/HabitatStyle2DGraphics.java
@@ -0,0 +1,38 @@
+package org.metaabm.examples.stupid5;
+
+/**
+ * Habitat Style 2D Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:52 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class HabitatStyle2DGraphics extends org.ascape.util.vis.DrawFeature {
+
+	enum Shapes {
+		rectangle, oval, marker
+	};
+
+	Shapes shape = Shapes.rectangle;
+
+	public void draw(org.eclipse.draw2d.Graphics g, Object object, int width,
+			int height) {
+
+		Habitat rootActGroup = (Habitat) object;
+		Habitat habitatRule = rootActGroup;
+
+		org.eclipse.swt.graphics.Color habitatRuleColorBlack = org.eclipse.draw2d.ColorConstants.black;
+
+		g.setForegroundColor(habitatRuleColorBlack);
+		g.setBackgroundColor(habitatRuleColorBlack);
+		shape = shape.rectangle;
+		if (shape == Shapes.oval) {
+			g.fillOval(0, 0, width, height);
+		} else if (shape == Shapes.marker) {
+			int d = (int) (width * .25 - 1);
+			int d2 = (int) (width * .5 - 1);
+			g.fillOval(d, d, d2, d2);
+		} else if (shape == Shapes.rectangle) {
+			g.fillRectangle(0, 0, width, height);
+		}
+
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/StupidModel5.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/StupidModel5.java
new file mode 100644
index 0000000..89a0258
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/StupidModel5.java
@@ -0,0 +1,397 @@
+package org.metaabm.examples.stupid5;
+
+/**
+ * Stupid Model 5 Java Implementation.
+ * 
+ * Generated by metaabm system: Sep 3, 2009 3:31:44 PM PDT in project: org.eclipse.amp.amf.examples.escape  */
+
+public class StupidModel5 extends org.ascape.model.Scape
+		implements
+			org.eclipse.amp.agf.gef.ModelFactoryProvider {
+
+	/**
+	 * The number of bugs to create.
+	 */
+
+	private int bugCount = 100;
+	/**
+	 * The number of habitats to create.
+	 */
+
+	private int habitatCount = 0;
+	/**
+	 * 
+	 */
+
+	private int bugVision = 4;
+	/**
+	 * The size of each dimension.
+	 */
+
+	private int[] grid2DDimensions = new int[2];
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape grid2D = null;
+	/**
+	 * Constructs a new Stupid Model 5.
+	 */
+
+	public StupidModel5() {
+		createUniqueID();
+		setGrid2DWidth(100);
+		setGrid2DHeight(100);
+	}
+
+	org.eclipse.gef.EditPartFactory factory;
+
+	org.eclipse.gef.EditPartFactory treeFactory;
+
+	//todo, make this a useful value for evaluating compatibility of different versions of generated classes
+	private static final long serialVersionUID = 89989998L;
+
+	private String uniqueID;
+
+	public String getUID() {
+		return uniqueID;
+	}
+
+	public void createUniqueID() {
+		//uniqueID = org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(5);
+	}
+
+	/**
+	 * Clones the agent, ensuring that a unique id is assigned.
+	 */
+	public Object clone() {
+		try {
+			StupidModel5 clone = (StupidModel5) super.clone();
+			clone.createUniqueID();
+			return clone;
+		} catch (Exception e) {
+			throw new RuntimeException("Unexpected cloning exception: " + e);
+		}
+	}
+
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape bugList = null;
+	/**
+	 * 
+	 */
+
+	private org.ascape.model.Scape habitatList = null;
+
+	/**
+	 * Gets the Bug property for Stupid Model 5.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getBug() {
+		return bugList;
+	}
+
+	/**
+	 * Sets the Bug property for Stupid Model 5.
+	 * 
+	 * @param _bug the new Bug value
+	 */
+
+	public void setBug(org.ascape.model.Scape _bug) {
+		bugList = _bug;
+	}
+	/**
+	 * Gets the Habitat property for Stupid Model 5.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getHabitat() {
+		return habitatList;
+	}
+
+	/**
+	 * Sets the Habitat property for Stupid Model 5.
+	 * 
+	 * @param _habitat the new Habitat value
+	 */
+
+	public void setHabitat(org.ascape.model.Scape _habitat) {
+		habitatList = _habitat;
+	}
+
+	/**
+	 * Creates the members of Stupid Model 5. 
+	 */
+	public void createScape() {
+		super.createScape();
+		setName(toString());
+
+		Bug bugProto = new Bug();
+		bugList = new org.ascape.model.Scape();
+		bugList.setName("Bug");
+		bugList.setPrototypeAgent(bugProto);
+		bugList.setExecutionOrder(org.ascape.model.Scape.RULE_ORDER);
+
+		grid2D = new org.ascape.model.Scape(
+				new org.ascape.model.space.Array2DMoore());
+		grid2D.setPrototypeAgent(new Habitat());
+		grid2D.setExtent(new org.ascape.model.space.Coordinate2DDiscrete(
+				getGrid2DDimensions()));
+		grid2D.setName("Fill Grid");
+		((org.ascape.model.space.CollectionSpace) grid2D.getSpace())
+				.setPeriodic(true);
+		add(grid2D);
+		org.ascape.model.Scape habitatList = grid2D;
+
+		add(bugList);
+
+		bugProto.setHostScape(grid2D);
+
+		bugList.addStatCollector(new org.ascape.util.data.StatCollectorCSA(
+				"Bug Population") {
+			private static final long serialVersionUID = 684614444640209893L;
+
+			@SuppressWarnings("unused")
+			public final boolean meetsCondition(Object object) {
+				return true;
+			}
+		});
+
+		bugList.addInitialRule(new org.ascape.model.rule.Rule("Initialize") {
+			private static final long serialVersionUID = 6846144446402098982L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid5.Bug) a).intializeNonFramework();
+			}
+		});
+		bugList.addRule(new org.ascape.model.rule.Rule("Random Movement") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid5.Bug) a).randomMovement();
+			}
+		});
+		bugList.addRule(new org.ascape.model.rule.Rule("Grow") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid5.Bug) a).grow();
+			}
+		});
+		habitatList.addRule(new org.ascape.model.rule.Rule(
+				"determindFoodProduction") {
+			private static final long serialVersionUID = 6846144446402098981L;
+			public void execute(org.ascape.model.Agent a) {
+				((org.metaabm.examples.stupid5.Habitat) a)
+						.determindFoodProduction();
+			}
+		});
+
+	}
+
+	/**
+	 * Creates UI views for Stupid Model 5.
+	 */
+	public void createGraphicViews() {
+		super.createGraphicViews();
+		org.ascape.view.vis.ChartView chart = new org.ascape.view.vis.ChartView();
+		org.eclipse.draw2d.Graphics dummyGraphics = new org.eclipse.draw2d.SWTGraphics(
+				new org.eclipse.swt.graphics.GC(
+						new org.eclipse.swt.graphics.Image(
+								org.eclipse.ui.PlatformUI.getWorkbench()
+										.getDisplay(), 10, 10)));
+
+		org.ascape.model.Scape bugScape = new StupidModel5();
+		bugScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Bug bug = new Bug() {
+			public void requestUpdate() {
+			}
+		};
+		bugScape.add(bug);
+
+		org.ascape.model.HostCell bugHost = new org.ascape.model.HostCell() {
+			public void requestUpdate() {
+			}
+		};
+		bugHost.setOccupant((org.ascape.model.CellOccupant) bug);
+		org.eclipse.swt.graphics.Color bugLastColor = dummyGraphics
+				.getForegroundColor();
+		org.eclipse.swt.graphics.Color bugNewColor = dummyGraphics
+				.getForegroundColor();
+
+		BugStyle2DGraphics bugStyle2D = new BugStyle2DGraphics();
+
+		org.ascape.model.Scape habitatScape = new StupidModel5();
+		habitatScape.setRunner(new org.ascape.runtime.NonGraphicRunner());
+		Habitat habitat = new Habitat() {
+			public void requestUpdate() {
+			}
+		};
+		habitatScape.add(habitat);
+
+		HabitatStyle2DGraphics habitatStyle2D = new HabitatStyle2DGraphics();
+
+		addView(chart);
+		addView(new org.ascape.view.vis.GEFView());
+	}
+
+	public void scapeSetup(org.ascape.model.event.ScapeEvent scapeEvent) {
+		//Set the size of the scape populations, e.g. for mutable scapes that need to have their size reset
+
+		bugList.setSize(bugCount);
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartFactory() {
+		if (factory == null) {
+			factory = new StupidModel5PartFactory();
+		}
+		return factory;
+	}
+
+	public org.eclipse.gef.EditPartFactory getEditPartTreeFactory() {
+		if (treeFactory == null) {
+			treeFactory = new org.eclipse.amp.escape.ascape.adapt.AscapePartTreeFactory();
+		}
+		return treeFactory;
+	}
+
+	public static void main(String[] args) {
+		(new org.ascape.runtime.NonGraphicRunner())
+				.openInstance("org.metaabm.examples.stupid5.StupidModel5");
+	}
+
+	/**
+	 * Gets the Bug Count property for Stupid Model 5.
+	 * @return The number of bugs to create.
+	 */
+
+	public int getBugCount() {
+		return bugCount;
+	}
+
+	/**
+	 * Sets the Bug Count property for Stupid Model 5.
+	 * The number of bugs to create.
+	 * @param _bugCount the new Bug Count value
+	 */
+
+	public void setBugCount(int _bugCount) {
+		bugCount = _bugCount;
+	}
+	/**
+	 * Gets the Habitat Count property for Stupid Model 5.
+	 * @return The number of habitats to create.
+	 */
+
+	public int getHabitatCount() {
+		return habitatCount;
+	}
+
+	/**
+	 * Sets the Habitat Count property for Stupid Model 5.
+	 * The number of habitats to create.
+	 * @param _habitatCount the new Habitat Count value
+	 */
+
+	public void setHabitatCount(int _habitatCount) {
+		habitatCount = _habitatCount;
+	}
+	/**
+	 * Gets the Bug Vision property for Stupid Model 5.
+	 * @return 
+	 */
+
+	public int getBugVision() {
+		return bugVision;
+	}
+
+	/**
+	 * Sets the Bug Vision property for Stupid Model 5.
+	 * 
+	 * @param _bugVision the new Bug Vision value
+	 */
+
+	public void setBugVision(int _bugVision) {
+		bugVision = _bugVision;
+	}
+	/**
+	 * Gets the Dimensions property for Grid 2D.
+	 * @return The size of each dimension.
+	 */
+
+	public int[] getGrid2DDimensions() {
+		return grid2DDimensions;
+	}
+
+	/**
+	 * Sets the Dimensions property for Grid 2D.
+	 * The size of each dimension.
+	 * @param _grid2DDimensions the new Dimensions value
+	 */
+
+	public void setGrid2DDimensions(int[] _grid2DDimensions) {
+		grid2DDimensions = _grid2DDimensions;
+	}
+	/**
+	 * Gets the Width property for Grid 2D.
+	 * @return The horizontal extent of the space.
+	 */
+
+	public int getGrid2DWidth() {
+		return grid2DDimensions[0];
+	}
+
+	/**
+	 * Sets the Width property for Grid 2D.
+	 * The horizontal extent of the space.
+	 * @param _grid2DWidth the new Width value
+	 */
+
+	public void setGrid2DWidth(int _grid2DWidth) {
+		grid2DDimensions[0] = _grid2DWidth;
+	}
+	/**
+	 * Gets the Height property for Grid 2D.
+	 * @return The vertical extent of the space.
+	 */
+
+	public int getGrid2DHeight() {
+		return grid2DDimensions[1];
+	}
+
+	/**
+	 * Sets the Height property for Grid 2D.
+	 * The vertical extent of the space.
+	 * @param _grid2DHeight the new Height value
+	 */
+
+	public void setGrid2DHeight(int _grid2DHeight) {
+		grid2DDimensions[1] = _grid2DHeight;
+	}
+	/**
+	 * Gets the Grid 2D property for Stupid Model 5.
+	 * @return 
+	 */
+
+	public org.ascape.model.Scape getGrid2D() {
+		return grid2D;
+	}
+
+	/**
+	 * Sets the Grid 2D property for Stupid Model 5.
+	 * 
+	 * @param _grid2D the new Grid 2D value
+	 */
+
+	public void setGrid2D(org.ascape.model.Scape _grid2D) {
+		grid2D = _grid2D;
+	}
+
+	public String getName() {
+		if (name == null) {
+			return "Stupid Model 5 " + uniqueID;
+		} else {
+			return name;
+		}
+	}
+}
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/StupidModel5PartFactory.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/StupidModel5PartFactory.java
new file mode 100644
index 0000000..6d20b24
--- /dev/null
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.escape/srcgen/org/metaabm/examples/stupid5/StupidModel5PartFactory.java
@@ -0,0 +1,18 @@
+package org.metaabm.examples.stupid5;
+public class StupidModel5PartFactory
+		extends
+			org.eclipse.amp.escape.ascape.adapt.AscapePartFactory {
+
+	protected org.eclipse.gef.EditPart getPartForElement(Object model) {
+
+		if (model instanceof Bug) {
+			return new org.metaabm.examples.stupid5.BugStyle2D();
+		}
+
+		if (model instanceof Habitat) {
+			return new org.metaabm.examples.stupid5.HabitatStyle2D();
+		}
+
+		return super.getPartForElement(model);
+	}
+}