diff --git a/models/Application_examples/Manufacturing_Process.mp b/models/Application_examples/Manufacturing_Process.mp
index c8ffe976b06a751bf6e4771985be6a99d726e65e..d030be3b8461411f1077cc98047df74b69c6638d 100644
--- a/models/Application_examples/Manufacturing_Process.mp
+++ b/models/Application_examples/Manufacturing_Process.mp
@@ -3,115 +3,316 @@
 │*│ │ Model of Manufacturing Process                     │ │
 │*│ │  Created by John Palmer in August, 2014.           │ │
 │*│ │  Edited by Keane Reynolds in July, 2021.           │ │
-│*│ │  Edited by Pamela Dyer in July and August, 2021.   │ │
+│*│ │  Edited by Pamela Dyer in July and August, 2021.   │ │ 
+│*│ │  Edited by Kristin Giammarco in January, 2022 to   │ │
+│*│ │  	add cost attributes and local and global cost    │ │ 
+│*│ │   calculations.                                    │ │
 │*│ └────────────────────────────────────────────────────┘ │
 │*│                                                        │
 │*│ ┌─[ Purpose ]────────────────────────────────────────┐ │
-│*│ │ To demonstrate a model of a system manufacturing   │ │
-│*│ │ process.                                           │ │
+│*│ │ To demonstrate a cost analysis in a model of a     │ │ 
+│*│ │ system manufacturing process.                      │ │
 │*│ └────────────────────────────────────────────────────┘ │
 │*│                                                        │
 │*│ ┌─[ Description ]────────────────────────────────────┐ │
-│*│ │ This model demonstrates application of Monterey    │ │
-│*│ │ Phoenix Modeling to Manufacturing Product Systems. │ │
-│*│ │ This is an example pre-dating the MP-Firebird      │ │
-│*│ │ application that was used to generate scenarios    │ │
-│*│ │ for separately estimating probability, time, and   │ │
-│*│ │ cost of each of these scenarios. MP version 4 may  │ │
-│*│ │ be used to conduct such analysis with its native   │ │
-│*│ │ capabilities.                                      │ │
-│*│ │                                                    │ │
-│*│ │ Ultimately, this model demonstrates a              │ │
-│*│ │ manufacturing system made from standard ROOT       │ │
-│*│ │ statements, "or" logic, SHARE ALL statements,      │ │
-│*│ │ iteration, and scope limits. This manufacturing    │ │
-│*│ │ system has several actors simultaniously           │ │
-│*│ │ performing jobs, so users may look to this model   │ │
-│*│ │ for a simple way of designing a system.            │ │
+│*│ │ This model demonstrates a cost analysis application│ │ 
+│*│ │ of Monterey Phoenix modeling to a manufacturing    │ │ 
+│*│ │ process.  This model was originally composed using │ │ 
+│*│ │ Eagle6, a prototype MP user interface.  Eagle6 did │ │ 
+│*│ │ not implement COORDINATE statements, probabilities,│ │ 
+│*│ │ or event attributes so the original model used     │ │
+│*│ │ SHARE ALL to simulate COORDINATE and performed cost│ │ 
+│*│ │ calculations externally. The 2014 model was        │ │
+│*│ │ implemented in MP version 4 to demonstrate         │ │ 
+│*│ │ integration of cost analysis capability in MP.     │ │ 
 │*│ └────────────────────────────────────────────────────┘ │
 │*│                                                        │
 │*│ ┌─[ References ]─────────────────────────────────────┐ │
-│*│ │ None.                                              │ │
+│*│ │ Palmer, John. "Utilization of Monterey Phoenix     │ │ 
+│*│ │ Modeling to Expedite Cost Estimation in            │ │ 
+│*│ │ Manufacturing Systems." Stevens Institute of       │ │ 
+│*│ │ Technology Master's Project, September 2014.       │ │                                     
 │*│ └────────────────────────────────────────────────────┘ │
 │*│                                                        │
 │*│ ┌─[ Search Terms ]───────────────────────────────────┐ │
-│*│ │ behavior, manufacturing process; event sharing;    │ │
-│*│ │ local scope; nested iteration                      │ │
+│*│ │ behavior, manufacturing process; analysis, cost;   │ │ 
+│*│ │ reports, local; reports, global                    │ │
 │*│ └────────────────────────────────────────────────────┘ │
 │*│                                                        │
 │*│ ┌─[ Instructions ]───────────────────────────────────┐ │
 │*│ │ Run for Scope 1.                                   │ │
 │*│ ├─[ Run Statistics ]─────────────────────────────────┤ │
-│*│ │ Scope 1: 8 traces in approx. 1.4 min.              │ │
+│*│ │ Scope 1: 8 traces in less than 1 sec.              │ │
 │*│ └────────────────────────────────────────────────────┘ │
 └*┴───────────────────────────────────────────────────────*/
 
 SCHEMA Manufacturing_System
 
-ROOT SYSTEM:	(* 	Incoming_Material
-					Multi_Axis_Machine
-					Media_Finish
-					Send_to_Inspector
+ROOT SYSTEM:	Incoming_Material
+				Multi_Axis_Machine
+				Media_Finish
+				Send_to_Inspector
     
-						(* 	Rejected
-							Rework
-							Send_to_Inspector 
-						*)
+				[ 	Rejected
+					Rework
+					Send_to_Inspector 
+				]
     
-						Accepted
-
-					( ( Turning_Machine_1 
-                        Milling_Machine_1 
-                        Turning_Machine_2 
-                        Milling_Machine_2 ) | 
-                        
-                        ( Multitask_1 Multitask_2 )
-    				)
+				Accepted
+
+				( Turning_Machine_1 
+                  Milling_Machine_1 
+                  Turning_Machine_2 
+                  Milling_Machine_2  		| 
+                  
+                  <<0.7>>  	Multitask_1 
+                    		Multitask_2 	)
     
-					Send_to_Inspector2
+				Send_to_Inspector2
     
-						(* 	Rejected2
-							Rework2
-							Send_to_Inspector2
-						*)
+				[ 	Rejected2
+					Rework2
+					Send_to_Inspector2
+				]
     
-						Accepted2
+				Accepted2
 
-					Surface_Treatment
-					Package_Part
-					Ship_Part
-				 *);
+				Surface_Treatment
+				Package_Part
+				Ship_Part
+;
 						
-ROOT 	INSPECTOR:  (* <0..3> 	Inspect 
-    							( Accept | Reject ) 
-    				*);
+ROOT INSPECTOR:  (* <0..2> 	Inspect 
+    						( Accept | <<0.2>> Reject ) 
+    			  *);
 					
-		Inspect:	CheckPart ProvideAnswer;	
+		Inspect: CheckPart ProvideAnswer;	
+
+
+COORDINATE	$x: Send_to_Inspector	FROM SYSTEM, 
+			$y: Inspect FROM INSPECTOR
+	DO ADD $x PRECEDES $y; OD;
+
+COORDINATE	$x: Accept	FROM INSPECTOR, 
+			$y: Accepted FROM SYSTEM
+	DO ADD $x PRECEDES $y; OD;
+
+COORDINATE	$x: Reject	FROM INSPECTOR, 
+			$y: Rejected FROM SYSTEM
+	DO ADD $x PRECEDES $y; OD;
 
-ROOT 	INSPECTOR2: (* <0..3> 	Inspect2
-								( Accept2 | Reject2 ) 
-					*);
+
+ROOT INSPECTOR2: (* <0..2> 	Inspect2
+							( Accept2 | <<0.1>> Reject2 ) 
+				  *);
 					
-		Inspect2:	CheckPart2 ProvideAnswer2;	
+		Inspect2: CheckPart2 ProvideAnswer2;	
+
+
+COORDINATE	$x: Send_to_Inspector2	FROM SYSTEM, 
+			$y: Inspect2 FROM INSPECTOR2
+	DO ADD $x PRECEDES $y; OD;
+
+COORDINATE	$x: Accept2	FROM INSPECTOR2, 
+			$y: Accepted2 FROM SYSTEM
+	DO ADD $x PRECEDES $y; OD;
+
+COORDINATE	$x: Reject2	FROM INSPECTOR2, 
+			$y: Rejected2 FROM SYSTEM
+	DO ADD $x PRECEDES $y; OD;
+
+
+/* ------- Add duration and cost attributes (hours) ------- */
+
+ATTRIBUTES{	number 	cost, trace_cost, weighted_cost, 
+    				accumulated_max_cost, accumulated_min_cost,
+    				accumulated_costs,
+    				trace_unique_id,
+    				largest_cost_trace_id, smallest_cost_trace_id, 
+    				trace_time;
+			bool	c_max, c_min;};
+
+
+COORDINATE $e: Incoming_Material 	DO 	SET	$e.duration AT LEAST 2;
+    										$e.cost:= 65;			OD;
+
+COORDINATE $e: Multi_Axis_Machine 	DO 	SET $e.duration AT LEAST 12;
+    										$e.cost:= 225;			OD;
+
+COORDINATE $e: Media_Finish 		DO 	SET $e.duration AT LEAST 7;
+    										$e.cost:= 110;			OD;
+
+COORDINATE $e: Send_to_Inspector 	DO 	SET $e.duration AT LEAST 0.5;
+    										$e.cost:= 65;			OD;
+
+COORDINATE $e: Accepted 			DO 	SET $e.duration AT LEAST 2;
+    										$e.cost:= 125;			OD;
+
+COORDINATE $e: Multitask_1 			DO 	SET $e.duration AT LEAST 8;
+    										$e.cost:= 195;			OD;
+
+COORDINATE $e: Multitask_2 			DO 	SET $e.duration AT LEAST 8;
+                                            $e.cost:= 195;			OD;
+
+COORDINATE $e: Send_to_Inspector2 	DO 	SET $e.duration AT LEAST 0.5;
+    										$e.cost:= 65;			OD;
+
+COORDINATE $e: Accepted2 			DO 	SET $e.duration AT LEAST 2;
+    										$e.cost:= 125;			OD;
+
+COORDINATE $e: Surface_Treatment 	DO 	SET $e.duration AT LEAST 7;
+                                            $e.cost:= 145;			OD;
+
+COORDINATE $e: Package_Part 		DO 	SET $e.duration AT LEAST 0.5;
+    										$e.cost:= 45;			OD;
+
+COORDINATE $e: Ship_Part 			DO 	SET $e.duration AT LEAST 1.5;
+    										$e.cost:= 95;			OD;
+
+COORDINATE $e: Milling_Machine_1 	DO 	SET $e.duration AT LEAST 6;
+    										$e.cost:= 165;			OD;
+
+COORDINATE $e: Milling_Machine_2 	DO 	SET $e.duration AT LEAST 6;
+    										$e.cost:= 165;			OD;
+
+COORDINATE $e: Rejected 			DO 	SET $e.duration AT LEAST 2.5;
+                                            $e.cost:= 125;			OD;
+
+COORDINATE $e: Rejected2 			DO 	SET $e.duration AT LEAST 2.5;
+                                            $e.cost:= 125;			OD;
+
+COORDINATE $e: Rework 				DO 	SET $e.duration AT LEAST 8;
+    										$e.cost:= 150;			OD;	
+
+COORDINATE $e: Rework2 				DO 	SET $e.duration AT LEAST 8;
+    										$e.cost:= 150;			OD;
+
+COORDINATE $e: Turning_Machine_1 	DO 	SET $e.duration AT LEAST 6;
+    										$e.cost:= 170;			OD;
+
+COORDINATE $e: Turning_Machine_2 	DO 	SET $e.duration AT LEAST 6;
+    										$e.cost:= 170;			OD;
+
+/* Comment in below statement to print the individual event costs */
+/*COORDINATE $e: $$EVENT 
+	DO	ADD $e has_cost SAY ("$" $e.cost ); OD;*/
+
+/* Create table of action rates and times */
+
+TABLE Trace_cost_and_time_table { TITLE("Action Rates and Time Required");
+	TABS 	string Event,
+    		number Action_Rate_dollars,
+    		number Cycle_Time_hours,
+    		number Action_Cost_dollars;
+};
+	
+	CLEAR Trace_cost_and_time_table;
+    		
+
+	COORDINATE $e: $$EVENT 	
+		DO					
+			IF $e.cost > 0 AND $e.duration.largest > 0 THEN
+					Trace_cost_and_time_table <| 
+							Event: 					SAY($e),
+							Action_Rate_dollars: 	$e.cost,
+							Cycle_Time_hours: 		$e.duration.largest,
+							Action_Cost_dollars: 	$e.cost * $e.duration.largest;
+
+							trace_cost+:= ($e.cost*$e.duration.largest);
+							trace_time+:= ($e.duration.largest);
+			FI;
+		OD;
+
+/*  Find the highest-cost trace */
+IF	GLOBAL.accumulated_max_cost < THIS.trace_cost THEN 
+	GLOBAL.accumulated_max_cost:= THIS.trace_cost;
+	GLOBAL.largest_cost_trace_id := trace_id;
+FI;
+
+/*  Find the lowest-cost trace  */
+IF 	GLOBAL.accumulated_min_cost >= THIS.trace_cost OR 
+	GLOBAL.accumulated_min_cost == 0 
+	THEN 
+	GLOBAL.accumulated_min_cost:= THIS.trace_cost; 
+	GLOBAL.smallest_cost_trace_id := trace_id;
+FI;
+
+/* 	Find the total of all trace costs for the denominator of 
+	the average cost calculation */
+GLOBAL.accumulated_costs +:= THIS.trace_cost;
+
+/*  Store trace duration data in a graph container for later 
+	accessing by GLOBAL section */
+GRAPH trace_data { };
+
+WITHIN trace_data{ 
+				Node$x: NEW(trace_cost);
+				Node$x.trace_unique_id := trace_id;
+    			Node$x.trace_cost := THIS.trace_cost;
+				}; 
+
+/* Annotate each trace with table and SAY statements */
+SHOW Trace_cost_and_time_table;
+SAY("Trace Cost: $"trace_cost);
+SAY("Trace Time: "trace_time" hours");
+
+/* Create and print global reports */
+GLOBAL 
+
+/* Create table summarizing trace data */
+TABLE trace_data_summary {
+TABS number     Trace_Number,
+     number     Trace_Probability,
+     string     Trace_Cost,
+     number		Weighted_Cost,
+     string		Maximum_Cost,
+     string 	Minimum_Cost; };
 
+WITHIN trace_data{
+    FOR Node$x
+        DO 
+    	weighted_cost +:= Node$x.trace_cost * #$$TP(Node$x.trace_unique_id);
+    	IF Node$x.trace_cost == accumulated_max_cost
+    		THEN c_max:= true; 
+    		ELSE c_max:= false; FI;
+    	IF Node$x.trace_cost == accumulated_min_cost
+    		THEN c_min:= true; 
+    		ELSE c_min:= false; FI;
+    	trace_data_summary     <| 
+                 Trace_Number:     	Node$x.trace_unique_id,
+                 Trace_Probability: #$$TP(Node$x.trace_unique_id),
+    			 Trace_Cost: 		SAY( "$"Node$x ),
+    			 Weighted_Cost:		weighted_cost,
+    			 Maximum_Cost:		SAY ( c_max ),
+    			 Minimum_Cost:		SAY ( c_min );                                               
+        OD;
+};
 
+SHOW trace_data_summary;
 
-ROOT SysInsp: 	(* <1..3> 	Send_to_Inspector  
-    						Inspect 
-							( Reject Rejected  | Accept Accepted )
-				*);
+/*Create summary report */
 
+REPORT Summary_Statistics_Report { 
+    TITLE ("Scope "$$scope" Summary Statistics"); };
 
-INSPECTOR, SysInsp 	SHARE ALL 	Inspect, Accept, Reject;
-SysInsp, SYSTEM 	SHARE ALL 	Send_to_Inspector, Accepted, Rejected;
+SAY("There are " #$$TRACE " traces total." )
+	=> Summary_Statistics_Report;
 
+SAY ("Average cost assuming equal trace probabilities is: $" 
+    accumulated_costs/#$$TRACE"." )
+	=> Summary_Statistics_Report;
 
-ROOT SysInsp2: 	(*<1..3> 	Send_to_Inspector2  
-    						Inspect2 
-							( Reject2 Rejected2  | Accept2 Accepted2 )
-				*);
+SAY ("Expected cost based on trace probabilities is: $" 
+    weighted_cost"." )
+	=> Summary_Statistics_Report;
 
+SAY("Trace "largest_cost_trace_id " has a max cost of $" 
+    accumulated_max_cost"." ) 
+	=> Summary_Statistics_Report;
 
-SysInsp2, SYSTEM 		SHARE ALL 	Send_to_Inspector2, Accepted2, Rejected2;
-INSPECTOR2, SysInsp2 	SHARE ALL 	Inspect2, Accept2, Reject2;
+SAY("Trace "smallest_cost_trace_id " has a min cost of $" 
+    accumulated_min_cost"." )
+	=> Summary_Statistics_Report;
 
+SHOW Summary_Statistics_Report;
+SHOW ACTIVITY DIAGRAM SYSTEM;