Index: /issm/trunk/src/c/DataSet/DataSet.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3648)
+++ /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3649)
@@ -566,5 +566,5 @@
 /*Objects methods*/
 /*FUNCTION DataSet::ComputeBasalStress{{{1*/
-void DataSet::ComputeBasalStress(Vec sigma_b,void* inputs,int analysis_type,int sub_analysis_type){
+void DataSet::ComputeBasalStress(Vec sigma_b,int analysis_type,int sub_analysis_type){
 
 	vector<Object*>::iterator object;
@@ -576,5 +576,5 @@
 
 			element=(Element*)(*object);
-			element->ComputeBasalStress(sigma_b,inputs,analysis_type,sub_analysis_type);
+			element->ComputeBasalStress(sigma_b,analysis_type,sub_analysis_type);
 		}
 	}
@@ -583,5 +583,5 @@
 /*}}}*/
 /*FUNCTION DataSet::ComputePressure{{{1*/
-void DataSet::ComputePressure(Vec p_g,void* inputs,int analysis_type,int sub_analysis_type){
+void DataSet::ComputePressure(Vec p_g,int analysis_type,int sub_analysis_type){
 
 	vector<Object*>::iterator object;
@@ -593,5 +593,5 @@
 
 			element=(Element*)(*object);
-			element->ComputePressure(p_g,inputs,analysis_type,sub_analysis_type);
+			element->ComputePressure(p_g,analysis_type,sub_analysis_type);
 		}
 	}
@@ -600,5 +600,5 @@
 /*}}}*/
 /*FUNCTION DataSet::ComputeStrainRate{{{1*/
-void DataSet::ComputeStrainRate(Vec eps,void* inputs,int analysis_type,int sub_analysis_type){
+void DataSet::ComputeStrainRate(Vec eps,int analysis_type,int sub_analysis_type){
 
 	vector<Object*>::iterator object;
@@ -610,5 +610,5 @@
 
 			element=(Element*)(*object);
-			element->ComputeStrainRate(eps,inputs,analysis_type,sub_analysis_type);
+			element->ComputeStrainRate(eps,analysis_type,sub_analysis_type);
 		}
 	}
@@ -617,5 +617,5 @@
 /*}}}*/
 /*FUNCTION DataSet::Configure{{{1*/
-void DataSet::Configure(DataSet* elements,DataSet* loads, DataSet* nodes, DataSet* vertices, DataSet* materials,DataSet* parameters){
+void DataSet::Configure(DataSet* elements,DataSet* loads, DataSet* nodes, DataSet* vertices, DataSet* materials,Parameters* parameters){
 
 	vector<Object*>::iterator object;
@@ -633,5 +633,5 @@
 		if(EnumIsLoad((*object)->Enum())){
 			load=(Load*)(*object);
-			load->Configure(elements,nodes,materials,parameters);
+			load->Configure(elements,loads,nodes,vertices,materials,parameters);
 		}
 
@@ -645,5 +645,5 @@
 /*}}}*/
 /*FUNCTION DataSet::CostFunction{{{1*/
-void  DataSet::CostFunction(double* pJ,void* inputs,int analysis_type,int sub_analysis_type){
+void  DataSet::CostFunction(double* pJ,int analysis_type,int sub_analysis_type){
 
 	double J=0;;
@@ -657,5 +657,5 @@
 
 			element=(Element*)(*object);
-			J+=element->CostFunction(inputs,analysis_type,sub_analysis_type);
+			J+=element->CostFunction(analysis_type,sub_analysis_type);
 
 		}
@@ -668,5 +668,5 @@
 /*}}}*/
 /*FUNCTION DataSet::CreateKMatrix{{{1*/
-void  DataSet::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type){
+void  DataSet::CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type){
 
 	vector<Object*>::iterator object;
@@ -679,10 +679,10 @@
 
 			element=(Element*)(*object);
-			element->CreateKMatrix(Kgg,inputs,analysis_type,sub_analysis_type);
+			element->CreateKMatrix(Kgg,analysis_type,sub_analysis_type);
 		}
 		if(EnumIsLoad((*object)->Enum())){
 
 			load=(Load*)(*object);
-			load->CreateKMatrix(Kgg,inputs,analysis_type,sub_analysis_type);
+			load->CreateKMatrix(Kgg,analysis_type,sub_analysis_type);
 		}
 	}
@@ -719,5 +719,5 @@
 /*}}}*/
 /*FUNCTION DataSet::CreatePVector{{{1*/
-void  DataSet::CreatePVector(Vec pg,void* inputs,int analysis_type,int sub_analysis_type){
+void  DataSet::CreatePVector(Vec pg,int analysis_type,int sub_analysis_type){
 
 	vector<Object*>::iterator object;
@@ -730,10 +730,10 @@
 
 			element=(Element*)(*object);
-			element->CreatePVector(pg,inputs,analysis_type,sub_analysis_type);
+			element->CreatePVector(pg,analysis_type,sub_analysis_type);
 		}
 		if(EnumIsLoad((*object)->Enum())){
 
 			load=(Load*)(*object);
-			load->CreatePVector(pg,inputs,analysis_type,sub_analysis_type);
+			load->CreatePVector(pg,analysis_type,sub_analysis_type);
 		}		
 	}
@@ -824,5 +824,5 @@
 /*}}}*/
 /*FUNCTION DataSet::Du{{{1*/
-void  DataSet::Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type){
+void  DataSet::Du(Vec du_g,int analysis_type,int sub_analysis_type){
 
 
@@ -835,5 +835,5 @@
 
 			element=(Element*)(*object);
-			element->Du(du_g,inputs,analysis_type,sub_analysis_type);
+			element->Du(du_g,analysis_type,sub_analysis_type);
 		}
 	}
@@ -980,5 +980,5 @@
 /*}}}*/
 /*FUNCTION DataSet::Gradj{{{1*/
-void  DataSet::Gradj(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){
+void  DataSet::Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,char* control_type){
 
 
@@ -991,5 +991,5 @@
 
 			element=(Element*)(*object);
-			element->Gradj(grad_g,inputs,analysis_type,sub_analysis_type,control_type);
+			element->Gradj(grad_g,analysis_type,sub_analysis_type,control_type);
 		}
 	}
@@ -1024,5 +1024,5 @@
 /*}}}*/
 /*FUNCTION DataSet::MeltingConstraints{{{1*/
-void  DataSet::MeltingConstraints(int* pconverged, int* pnum_unstable_constraints,void* inputs,int analysis_type,int sub_analysis_type){
+void  DataSet::MeltingConstraints(int* pconverged, int* pnum_unstable_constraints,int analysis_type,int sub_analysis_type){
 
 	/* generic object pointer: */
@@ -1044,5 +1044,5 @@
 			pengrid=(Pengrid*)(*object);
 
-			pengrid->PenaltyConstrain(&unstable,inputs,analysis_type,sub_analysis_type);
+			pengrid->PenaltyConstrain(&unstable,analysis_type,sub_analysis_type);
 
 			num_unstable_constraints+=unstable;
@@ -1066,5 +1066,5 @@
 /*}}}*/
 /*FUNCTION DataSet::Misfit{{{1*/
-void  DataSet::Misfit(double* pJ,void* inputs,int analysis_type,int sub_analysis_type){
+void  DataSet::Misfit(double* pJ,int analysis_type,int sub_analysis_type){
 
 	double J=0;;
@@ -1078,5 +1078,5 @@
 
 			element=(Element*)(*object);
-			J+=element->Misfit(inputs,analysis_type,sub_analysis_type);
+			J+=element->Misfit(analysis_type,sub_analysis_type);
 
 		}
@@ -1160,5 +1160,5 @@
 /*}}}*/
 /*FUNCTION DataSet::PenaltyCreateKMatrix{{{1*/
-void  DataSet::PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type){
+void  DataSet::PenaltyCreateKMatrix(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type){
 
 	vector<Object*>::iterator object;
@@ -1170,5 +1170,5 @@
 
 			load=(Load*)(*object);
-			load->PenaltyCreateKMatrix(Kgg,inputs,kmax,analysis_type,sub_analysis_type);
+			load->PenaltyCreateKMatrix(Kgg,kmax,analysis_type,sub_analysis_type);
 		}
 	}
@@ -1177,5 +1177,5 @@
 /*}}}*/
 /*FUNCTION DataSet::PenaltyCreatePVector{{{1*/
-void  DataSet::PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type){
+void  DataSet::PenaltyCreatePVector(Vec pg,double kmax,int analysis_type,int sub_analysis_type){
 
 	vector<Object*>::iterator object;
@@ -1187,5 +1187,5 @@
 
 			load=(Load*)(*object);
-			load->PenaltyCreatePVector(pg,inputs,kmax,analysis_type,sub_analysis_type);
+			load->PenaltyCreatePVector(pg,kmax,analysis_type,sub_analysis_type);
 		}		
 	}
@@ -1329,5 +1329,5 @@
 /*}}}*/
 /*FUNCTION DataSet::SurfaceArea{{{1*/
-void  DataSet::SurfaceArea(double* pS,void* inputs,int analysis_type,int sub_analysis_type){
+void  DataSet::SurfaceArea(double* pS,int analysis_type,int sub_analysis_type){
 
 	double S=0;;
@@ -1341,5 +1341,5 @@
 
 			element=(Element*)(*object);
-			S+=element->SurfaceArea(inputs,analysis_type,sub_analysis_type);
+			S+=element->SurfaceArea(analysis_type,sub_analysis_type);
 
 		}
@@ -1368,38 +1368,4 @@
 }
 /*}}}*/
-/*FUNCTION DataSet::UpdateFromInputs{{{1*/
-void  DataSet::UpdateFromInputs(void* inputs){
-
-	vector<Object*>::iterator object;
-	Element* element=NULL;
-	Load* load=NULL;
-	Material* material=NULL;
-	Node* node=NULL;
-
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-
-		if(EnumIsElement((*object)->Enum())){
-
-			element=(Element*)(*object);
-			element->UpdateFromInputs(inputs);
-		}
-		if(EnumIsLoad((*object)->Enum())){
-
-			load=(Load*)(*object);
-			load->UpdateFromInputs(inputs);
-		}
-		if(EnumIsMaterial((*object)->Enum())){
-
-			material=(Material*)(*object);
-			material->UpdateFromInputs(inputs);
-		}
-		if((*object)->Enum()==NodeEnum){
-			node=(Node*)(*object);
-			node->UpdateFromInputs(inputs);
-		}		
-	}
-
-}
-/*}}}*/
 /*FUNCTION DataSet::UpdateVertexPositions{{{1*/
 void  DataSet::UpdateVertexPositions(double* thickness,double* bed){
Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 3648)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 3649)
@@ -13,8 +13,10 @@
 #include "../toolkits/toolkits.h"
 #include "../objects/Object.h"
+class Inputs;
+class Parameters;
 
 class DataSet{
 	
-	private: 
+	public: 
 		
 		/*internals: */
@@ -29,6 +31,4 @@
 		int*            sorted_ids;
 		int*            id_offsets;
-
-	public:
 
 		/*constructors, destructors: {{{1*/
@@ -62,5 +62,5 @@
 		void  FlagNodeSets(Vec pv_g, Vec pv_m, Vec pv_n, Vec pv_f, Vec pv_s);
 		void  clear();
-		void  Configure(DataSet* elements,DataSet* loads, DataSet* nodes, DataSet* vertices, DataSet* materials,DataSet* parameters);
+		void Configure(DataSet* elements,DataSet* loads, DataSet* nodes, DataSet* vertices, DataSet* materials,Parameters* parameters);
 		Object* GetObjectByOffset(int offset);
 		Object* GetObjectById(int* poffset,int eid);
@@ -68,25 +68,24 @@
 		void  SetSorting(int* in_sorted_ids,int* in_id_offsets);
 		void  Sort();
-		void  CreateKMatrix(Mat Kgg,void* inputs, int analysis_type,int sub_analysis_type);
-		void  CreatePVector(Vec pg,void* inputs, int analysis_type,int sub_analysis_type);
-		void  UpdateFromInputs(void* inputs);
+		void  CreateKMatrix(Mat Kgg, int analysis_type,int sub_analysis_type);
+		void  CreatePVector(Vec pg, int analysis_type,int sub_analysis_type);
 		void  UpdateInputs(double* solution,int analysis_type,int sub_analysis_type);
-		void  PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type);
-		void  PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type);
+		void  PenaltyCreateKMatrix(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type);
+		void  PenaltyCreatePVector(Vec pg,double kmax,int analysis_type,int sub_analysis_type);
 		int   RiftIsPresent();
 		int   MeltingIsPresent();
-		void  MeltingConstraints(int* pconverged, int* pnum_unstable_constraints,void* inputs,int analysis_type,int sub_analysis_type);
+		void  MeltingConstraints(int* pconverged, int* pnum_unstable_constraints,int analysis_type,int sub_analysis_type);
 		DataSet* Copy(void);
-		void  Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type);
-		void  Gradj(Vec grad_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);
-		void  Misfit(double* pJ, void* inputs,int analysis_type,int sub_analysis_type);
-		void  CostFunction(double* pJ, void* inputs,int analysis_type,int sub_analysis_type);
-		void  SurfaceArea(double* pS, void* inputs,int analysis_type,int sub_analysis_type);
+		void  Du(Vec du_g,int analysis_type,int sub_analysis_type);
+		void  Gradj(Vec grad_g,int analysis_type,int sub_analysis_type,char* control_type);
+		void  Misfit(double* pJ, int analysis_type,int sub_analysis_type);
+		void  CostFunction(double* pJ, int analysis_type,int sub_analysis_type);
+		void  SurfaceArea(double* pS, int analysis_type,int sub_analysis_type);
 		void  FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field);
 		void  FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname);
 		int   DeleteObject(Object* object);
-		void  ComputeBasalStress(Vec sigma_b,void* inputs,int analysis_type,int sub_analysis_type);
-		void  ComputePressure(Vec p_g,void* inputs,int analysis_type,int sub_analysis_type);
-		void  ComputeStrainRate(Vec eps,void* inputs,int analysis_type,int sub_analysis_type);
+		void  ComputeBasalStress(Vec sigma_b,int analysis_type,int sub_analysis_type);
+		void  ComputePressure(Vec p_g,int analysis_type,int sub_analysis_type);
+		void  ComputeStrainRate(Vec eps,int analysis_type,int sub_analysis_type);
 		int   FindResult(void* pvalue, char* name);
 		void  FieldExtrude(Vec field,double* field_serial,char* field_name, int collapse);
Index: /issm/trunk/src/c/DataSet/Inputs.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/Inputs.cpp	(revision 3648)
+++ /issm/trunk/src/c/DataSet/Inputs.cpp	(revision 3649)
@@ -9,6 +9,19 @@
 #endif
 
+
+#include <vector>
+#include <functional>
+#include <algorithm>
+#include <iostream>
+
 #include "./DataSet.h"
 #include "./Inputs.h"
+
+#include "../shared/shared.h"
+#include "../include/macros.h"
+#include "../EnumDefinitions/EnumDefinitions.h"
+
+using namespace std;
+
 
 /*Object constructors and destructor*/
@@ -19,6 +32,5 @@
 /*}}}*/
 /*FUNCTION Inputs::Inputs(int in_enum){{{1*/
-Inputs::Inputs(int in_enum): DataSet(in_enum){
-{
+Inputs::Inputs(int in_enum): DataSet(in_enum) {
 	//do nothing;
 	return;
Index: /issm/trunk/src/c/objects/Node.cpp
===================================================================
--- /issm/trunk/src/c/objects/Node.cpp	(revision 3648)
+++ /issm/trunk/src/c/objects/Node.cpp	(revision 3649)
@@ -227,5 +227,5 @@
 /*Object management: {{{1*/
 /*FUNCTION Node::Configure {{{2*/
-void  Node::Configure(DataSet* nodesin){
+void  Node::Configure(DataSet* nodesin,DataSet* verticesin){
 
 	int i;
@@ -233,5 +233,5 @@
 	/*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective 
 	 * datasets, using internal ids and offsets hidden in hooks: */
-	hvertex.configure(nodesin);
+	hvertex.configure(verticesin);
 	hupper_node.configure(nodesin);
 
Index: /issm/trunk/src/c/objects/Node.h
===================================================================
--- /issm/trunk/src/c/objects/Node.h	(revision 3648)
+++ /issm/trunk/src/c/objects/Node.h	(revision 3649)
@@ -39,5 +39,5 @@
 		/*}}}*/
 		/*FUNCTION object management {{{1*/
-		void  Configure(DataSet* nodes);
+		void  Configure(DataSet* nodes,DataSet* vertices);
 		void  DeepEcho();
 		void  Demarshall(char** pmarshalled_dataset);
Index: /issm/trunk/src/c/objects/Numericalflux.cpp
===================================================================
--- /issm/trunk/src/c/objects/Numericalflux.cpp	(revision 3648)
+++ /issm/trunk/src/c/objects/Numericalflux.cpp	(revision 3649)
@@ -60,4 +60,5 @@
 	int  e1,e2;
 	int  i1,i2;
+	int  j;
 	int  pos1,pos2;
 	int  num_nodes;
@@ -74,6 +75,6 @@
 
 	/*Get left and right elements*/
-	e1=(double)iomodel->edges[4*i+2]; //edges are [node1 node2 elem1 elem2]
-	e2=(double)iomodel->edges[4*i+3]; //edges are [node1 node2 elem1 elem2]
+	e1=(int)iomodel->edges[4*i+2]; //edges are [node1 node2 elem1 elem2]
+	e2=(int)iomodel->edges[4*i+3]; //edges are [node1 node2 elem1 elem2]
 	if (isnan(e2)){
 		/* Boundary edge, only one element */
@@ -136,6 +137,5 @@
 	/*Hooks: */
 	this->hnodes.Init(numericalflux_node_ids,num_nodes);
-	this->helements.Init(&numericalflux_elem_ids,num_elems);
-	this->hmatpar.Init(&numericalflux_mparid,1);
+	this->helements.Init(numericalflux_elem_ids,num_elems);
 
 	//intialize  and add as many inputs per element as requested: 
Index: /issm/trunk/src/c/objects/Numericalflux.h
===================================================================
--- /issm/trunk/src/c/objects/Numericalflux.h	(revision 3648)
+++ /issm/trunk/src/c/objects/Numericalflux.h	(revision 3649)
@@ -28,5 +28,5 @@
 		Numericalflux(int numericalflux_id,int* numericalflux_node_ids,int numnodes, int* numericalflux_element_ids, int numelements);
 		Numericalflux(int numericalflux_id,Hook* numericalflux_hnodes, Hook* numericalflux_helements, Parameters* parameters, Inputs* numericalflux_inputs);
-		Numericalflux::Numericalflux(int numericalflux_id,int i, IoModel* iomodel);
+		Numericalflux(int numericalflux_id,int i, IoModel* iomodel);
 		~Numericalflux();
 		/*}}}*/
Index: /issm/trunk/src/c/objects/objects.h
===================================================================
--- /issm/trunk/src/c/objects/objects.h	(revision 3648)
+++ /issm/trunk/src/c/objects/objects.h	(revision 3649)
@@ -5,29 +5,4 @@
 #ifndef ALL_OBJECTS_H_
 #define ALL_OBJECTS_H_
-
-class Object;
-class Matice;
-class Matpar;
-class Node;
-class Penta;
-class Tria;
-class Sing;
-class Beam;
-class Spc;
-class Rgb;
-class Icefront;
-class Riftfront;
-class Penpair;
-class Pengrid;
-class Numericalflux;
-class Param;
-class Element;
-class NodeSets;
-class Model;
-class TriaVertexInput;
-class DoubleInput;
-class IntInput;
-class BoolInput;
-class Input;
 
 /*Abstract class: */
@@ -57,4 +32,6 @@
 #include "./Input.h"
 #include "./TriaVertexInput.h"
+#include "./Vertex.h"
+#include "./Numpar.h"
 #include "./BoolInput.h"
 #include "./IntInput.h"
