Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 4362)
+++ /issm/trunk/src/c/Makefile.am	(revision 4363)
@@ -370,4 +370,5 @@
 					./modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp\
 					./modules/ModelProcessorx/Control/CreateParametersControl.cpp\
+					./modules/ModelProcessorx/Control/UpdateElementsControl.cpp\
 					./modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp\
 					./modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp\
@@ -914,4 +915,5 @@
 					./modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp\
 					./modules/ModelProcessorx/Control/CreateParametersControl.cpp\
+					./modules/ModelProcessorx/Control/UpdateElementsControl.cpp\
 					./modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp\
 					./modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp\
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsControl.cpp	(revision 4363)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsControl.cpp	(revision 4363)
@@ -0,0 +1,48 @@
+/*
+ * UpdateElementsControl:
+ */
+
+#include "../../../Container/Container.h"
+#include "../../../toolkits/toolkits.h"
+#include "../../../io/io.h"
+#include "../../../EnumDefinitions/EnumDefinitions.h"
+#include "../../../objects/objects.h"
+#include "../../../shared/shared.h"
+#include "../../MeshPartitionx/MeshPartitionx.h"
+#include "../../../include/include.h"
+#include "../ModelProcessorx.h"
+
+void	UpdateElementsControl(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+
+	/*Intermediary*/
+	int i;
+	int counter;
+	Element* element=NULL;
+	double*  control_parameter=NULL;
+
+	/*Get out if no Control Requested*/
+	if(!iomodel->control_analysis) return;
+
+	/*Fetch data needed: */
+	IoModelFetchData(&iomodel->vx_obs,NULL,NULL,iomodel_handle,"vx_obs");
+	IoModelFetchData(&iomodel->vy_obs,NULL,NULL,iomodel_handle,"vy_obs");
+	IoModelFetchData(&iomodel->weights,NULL,NULL,iomodel_handle,"weights");
+	IoModelFetchData(&control_parameter,NULL,NULL,iomodel_handle,iomodel->control_type);
+
+	/*Update elements: */
+	counter=0;
+	for (i=0;i<iomodel->numberofelements;i++){
+		if(iomodel->my_elements[i]){
+			element=(Element*)elements->GetObjectByOffset(counter);
+			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+			counter++;
+		}
+	}
+	cleanup_and_return:
+
+	/*Free data: */
+	xfree((void**)&iomodel->vx_obs);
+	xfree((void**)&iomodel->vy_obs);
+	xfree((void**)&iomodel->weights);
+	xfree((void**)&control_parameter);
+}
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 4362)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 4363)
@@ -107,5 +107,4 @@
 	xfree((void**)&parameteroutput);
 
-
 	/*Before returning, create parameters in case we are running Qmu or control types runs: */
 	CreateParametersControl(&parameters,iomodel,iomodel_handle,analysis_type);
Index: /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 4362)
+++ /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 4363)
@@ -21,4 +21,5 @@
 void  CreateParametersControl(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_type);
 void  CreateParametersQmu(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_type);
+void	UpdateElementsControl(Elements* elements,IoModel* iomodel_handle,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
 
 /*Creation of fem datasets: specialised drivers: */
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 4362)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 4363)
@@ -2165,5 +2165,5 @@
 }
 /*}}}*/
-/*FUNCTION Tria::Update(IoModel* iomodel,int analysis_counter,int analysis_type){{{1*/
+/*FUNCTION Tria::Update{{{1*/
 void Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type){ //i is the element index
 
@@ -2221,4 +2221,8 @@
 		if (iomodel->drag_q) this->inputs->AddInput(new DoubleInput(DragQEnum,iomodel->drag_q[index]));
 		this->inputs->AddInput(new IntInput(DragTypeEnum,iomodel->drag_type));
+	}
+	if (iomodel->rheology_B) {
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->rheology_B[tria_vertex_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(RheologyBEnum,nodeinputs));
 	}
 	if (iomodel->melting_rate) {
