Index: issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- issm/trunk-jpl/src/c/Makefile.am	(revision 14995)
+++ issm/trunk-jpl/src/c/Makefile.am	(revision 14996)
@@ -47,4 +47,10 @@
 					./classes/IoModel.h\
 					./classes/IoModel.cpp\
+					./classes/objects/DataSet.h\
+					./classes/objects/DataSet.cpp\
+					./classes/objects/Nodes.h\
+					./classes/objects/Nodes.cpp\
+					./classes/objects/Vertices.h\
+					./classes/objects/Vertices.cpp\
 					./classes/objects/Bucket.h\
 					./classes/objects/Node.h\
@@ -67,6 +73,10 @@
 					./classes/objects/ElementResults/BoolElementResult.h\
 					./classes/objects/ElementResults/BoolElementResult.cpp\
+					./classes/objects/ExternalResults/Results.h\
+					./classes/objects/ExternalResults/Results.cpp\
 					./classes/objects/ExternalResults/ExternalResult.h\
 					./classes/objects/ExternalResults/GenericExternalResult.h\
+					./classes/objects/Elements/Elements.h\
+					./classes/objects/Elements/Elements.cpp\
 					./classes/objects/Elements/Tria.h\
 					./classes/objects/Elements/Tria.cpp\
@@ -75,4 +85,6 @@
 					./classes/objects/Elements/TriaRef.h\
 					./classes/objects/Elements/TriaRef.cpp\
+					./classes/objects/Inputs/Inputs.h\
+					./classes/objects/Inputs/Inputs.cpp\
 					./classes/objects/Inputs/Input.h\
 					./classes/objects/Inputs/InputLocal.h\
@@ -87,4 +99,6 @@
 					./classes/objects/Inputs/DatasetInput.h\
 					./classes/objects/Inputs/DatasetInput.cpp\
+					./classes/objects/Materials/Materials.h\
+					./classes/objects/Materials/Materials.cpp\
 					./classes/objects/Materials/Matice.h\
 					./classes/objects/Materials/Matice.cpp\
@@ -93,4 +107,6 @@
 					./classes/objects/Materials/Matpar.h\
 					./classes/objects/Materials/Matpar.cpp\
+					./classes/objects/Constraints/Constraints.h\
+					./classes/objects/Constraints/Constraints.cpp\
 					./classes/objects/Constraints/Constraint.h\
 					./classes/objects/Constraints/SpcStatic.cpp\
@@ -98,4 +114,6 @@
 					./classes/objects/Constraints/SpcDynamic.cpp\
 					./classes/objects/Constraints/SpcDynamic.h\
+					./classes/objects/Loads/Loads.h\
+					./classes/objects/Loads/Loads.cpp\
 					./classes/objects/Loads/Penpair.cpp\
 					./classes/objects/Loads/Penpair.h\
@@ -115,4 +133,6 @@
 					./classes/toolkits/Vector.h\
 					./classes/toolkits/Solver.h\
+					./classes/objects/Params/Parameters.h\
+					./classes/objects/Params/Parameters.cpp\
 					./classes/objects/Params/Param.h\
 					./classes/objects/Params/GenericParam.h\
@@ -151,27 +171,4 @@
 					./classes/objects/Profiler.h\
 					./classes/objects/Profiler.cpp\
-					./Container/Container.h\
-					./Container/Constraints.h\
-					./Container/Constraints.cpp\
-					./Container/DataSet.h\
-					./Container/DataSet.cpp\
-					./Container/Elements.h\
-					./Container/Elements.cpp\
-					./Container/Inputs.h\
-					./Container/Inputs.cpp\
-					./Container/Loads.h\
-					./Container/Loads.cpp\
-					./Container/Materials.h\
-					./Container/Materials.cpp\
-					./Container/Nodes.h\
-					./Container/Nodes.cpp\
-					./Container/Options.h\
-					./Container/Options.cpp\
-					./Container/Parameters.h\
-					./Container/Parameters.cpp\
-					./Container/Results.h\
-					./Container/Results.cpp\
-					./Container/Vertices.h\
-					./Container/Vertices.cpp\
 					./shared/shared.h\
 					./shared/MemOps/MemOps.h\
@@ -334,4 +331,6 @@
 					./solutionsequences/solutionsequence_nonlinear.cpp\
 					./solutionsequences/solutionsequence_newton.cpp\
+					./classes/objects/Options/Options.h\
+					./classes/objects/Options/Options.cpp\
 					./classes/objects/Options/Option.h\
 					./classes/objects/Options/GenericOption.h\
@@ -614,6 +613,6 @@
 #}}}
 #Kriging sources  {{{
-kriging_sources = ./Container/Observations.h\
-						./Container/Observations.cpp\
+kriging_sources = ./classes/kriging/Observations.h\
+						./classes/kriging/Observations.cpp\
 						./classes/kriging/Variogram.h \
 						./classes/kriging/GaussianVariogram.h\
@@ -633,6 +632,6 @@
 
 #For parallel kriging, only difference is ./modules/Krigingx/pKrigingx.cpp with no multithreading
-pkriging_sources = ./Container/Observations.h\
-						./Container/Observations.cpp\
+pkriging_sources = ./classes/kriging/Observations.h\
+						./classes/kriging/Observations.cpp\
 						./classes/kriging/Variogram.h \
 						./classes/kriging/GaussianVariogram.h\
Index: issm/trunk-jpl/src/c/analyses/controlconvergence.cpp
===================================================================
--- issm/trunk-jpl/src/c/analyses/controlconvergence.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/analyses/controlconvergence.cpp	(revision 14996)
@@ -11,5 +11,4 @@
 #include "../classes/objects/objects.h"
 #include "../shared/io/io.h"
-#include "../Container/Container.h"
 #include "../shared/Enum/Enum.h"
 #include "../modules/modules.h"
Index: issm/trunk-jpl/src/c/analyses/dakota_core.cpp
===================================================================
--- issm/trunk-jpl/src/c/analyses/dakota_core.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/analyses/dakota_core.cpp	(revision 14996)
@@ -38,7 +38,5 @@
 #include "../toolkits/toolkits.h"
 #include "../shared/Enum/Enum.h"
-#include "../classes/dakota/DakotaPlugin.h"
-#include "../classes/FemModel.h"
-#include "../Container/Parameters.h"
+#include "../classes/classes.h"
 
 #ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
Index: issm/trunk-jpl/src/c/analyses/steadystateconvergence.cpp
===================================================================
--- issm/trunk-jpl/src/c/analyses/steadystateconvergence.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/analyses/steadystateconvergence.cpp	(revision 14996)
@@ -10,5 +10,4 @@
 #include "./analyses.h"
 #include "../classes/objects/objects.h"
-#include "../Container/Container.h"
 #include "../shared/Enum/Enum.h"
 #include "../modules/modules.h"
Index: issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 14996)
@@ -10,5 +10,4 @@
 
 #include <stdio.h>
-#include "../Container/Container.h"
 #include "../analyses/analyses.h"
 #include "../shared/io/io.h"
Index: issm/trunk-jpl/src/c/classes/Hook.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Hook.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/Hook.cpp	(revision 14996)
@@ -12,5 +12,4 @@
 #include <string.h>
 #include "./classes.h"
-#include "../Container/Container.h"
 #include "../shared/Enum/Enum.h"
 #include "../shared/shared.h"
Index: issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 14996)
@@ -17,6 +17,4 @@
 #include "./classes.h"
 #include "../shared/io/io.h"
-#include "../Container/Parameters.h"
-#include "../Container/Elements.h"
 #include "../shared/shared.h"
 
Index: issm/trunk-jpl/src/c/classes/Patch.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Patch.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/Patch.cpp	(revision 14996)
@@ -14,7 +14,4 @@
 #include <math.h>
 #include "./classes.h"
-#include "../Container/Container.h"
-#include "../shared/io/io.h"
-#include "../shared/Enum/Enum.h"
 #include "../shared/shared.h"
 
Index: issm/trunk-jpl/src/c/classes/classes.h
===================================================================
--- issm/trunk-jpl/src/c/classes/classes.h	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/classes.h	(revision 14996)
@@ -24,4 +24,7 @@
 #include "./kriging/krigingobjects.h"
 
+/*dakota:*/
+#include "./dakota/DakotaPlugin.h"
+
 /*diverse: */
 #include "./Hook.h"
Index: issm/trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 #include "../objects/objects.h"
 #include "../../shared/shared.h"
-#include "../../Container/Container.h"
 
 /*ExponentialVariogram constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 #include "../objects/objects.h"
 #include "../../shared/shared.h"
-#include "../../Container/Container.h"
 
 /*GaussianVariogram constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/kriging/Observations.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 14996)
@@ -0,0 +1,584 @@
+/*
+ * \file Observations.cpp
+ * \brief: Implementation of Observations class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include <vector>
+#include <functional>
+#include <algorithm>
+#include <iostream>
+
+#include "../objects/DataSet.h"
+#include "../objects/Options/Options.h"
+#include "./Observations.h"
+#include "./Observation.h"
+#include "../../shared/shared.h"
+
+#include "./Quadtree.h"
+#include "./Variogram.h"
+
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Observations::Observations(){{{*/
+Observations::Observations(){
+	this->quadtree = NULL;
+	return;
+}
+/*}}}*/
+/*FUNCTION Observations::Observations(IssmPDouble* observations_list,IssmPDouble* x,IssmPDouble* y,int n,Options* options){{{*/
+Observations::Observations(IssmPDouble* observations_list,IssmPDouble* x,IssmPDouble* y,int n,Options* options){
+
+	/*Intermediaries*/
+	int          i,maxdepth,level,counter,index;
+	int          xi,yi;
+	IssmPDouble  xmin,xmax,ymin,ymax;
+	IssmPDouble  offset,minlength,minspacing,mintrimming,maxtrimming;
+	Observation *observation = NULL;
+
+	/*Check that observations is not empty*/
+	if(n==0) _error_("No observation found");
+
+	/*Get extrema*/
+	xmin=x[0]; ymin=y[0];
+	xmax=x[0]; ymax=y[0];
+	for(i=1;i<n;i++){
+		xmin=min(xmin,x[i]); ymin=min(ymin,y[i]);
+		xmax=max(xmax,x[i]); ymax=max(ymax,y[i]);
+	}
+	offset=0.05*(xmax-xmin); xmin-=offset; xmax+=offset;
+	offset=0.05*(ymax-ymin); ymin-=offset; ymax+=offset;
+
+	/*Get trimming limits*/
+	options->Get(&mintrimming,"mintrimming",-1.e+21);
+	options->Get(&maxtrimming,"maxtrimming",+1.e+21);
+	options->Get(&minspacing,"minspacing",0.01);
+	if(minspacing<=0) _error_("minspacing must > 0");
+
+	/*Get Minimum box size*/
+	if(options->GetOption("boxlength")){
+		options->Get(&minlength,"boxlength");
+		if(minlength<=0)_error_("boxlength should be a positive number");
+		maxdepth=reCast<int,IssmPDouble>(log(max(xmax-xmin,ymax-ymin)/minlength +1)/log(2.0));
+	}
+	else{
+		maxdepth = 30;
+		minlength=max(xmax-xmin,ymax-ymin)/IssmPDouble((1L<<maxdepth)-1);
+	}
+
+	/*Initialize Quadtree*/
+	_pprintString_("Generating quadtree with a maximum box size " << minlength << " (depth=" << maxdepth << ")... ");
+	this->quadtree = new Quadtree(xmin,xmax,ymin,ymax,maxdepth);
+
+	/*Add observations one by one*/
+	counter = 0;
+	for(i=0;i<n;i++){
+
+		/*First check limits*/
+		if(observations_list[i]>maxtrimming) continue;
+		if(observations_list[i]<mintrimming) continue;
+
+		/*First check that this observation is not too close from another one*/
+		this->quadtree->ClosestObs(&index,x[i],y[i]);
+		if(index>=0){
+			observation=dynamic_cast<Observation*>(this->GetObjectByOffset(index));
+			if(pow(observation->x-x[i],2)+pow(observation->y-y[i],2) < minspacing) continue;
+		}
+
+		this->quadtree->IntergerCoordinates(&xi,&yi,x[i],y[i]);
+		this->quadtree->QuadtreeDepth2(&level,xi,yi);
+		if((int)level <= maxdepth){
+			observation = new Observation(x[i],y[i],xi,yi,counter++,observations_list[i]);
+			this->quadtree->Add(observation);
+			this->AddObject(observation);
+		}
+		else{
+			/*We need to average with the current observations*/
+			this->quadtree->AddAndAverage(x[i],y[i],observations_list[i]);
+		}
+	}
+	_pprintLine_("done");
+	_pprintLine_("Initial number of observations: " << n);
+	_pprintLine_("  Final number of observations: " << this->quadtree->NbObs);
+}
+/*}}}*/
+/*FUNCTION Observations::~Observations(){{{*/
+Observations::~Observations(){
+	delete quadtree;
+	return;
+}
+/*}}}*/
+
+/*Methods*/
+/*FUNCTION Observations::ClosestObservation{{{*/
+void Observations::ClosestObservation(IssmPDouble *px,IssmPDouble *py,IssmPDouble *pobs,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius){
+
+	/*Output and Intermediaries*/
+	int          nobs,i,index;
+	IssmPDouble  hmin,h2,hmin2,radius2;
+	int         *indices      = NULL;
+	Observation *observation  = NULL;
+
+	/*If radius is not provided or is 0, return all observations*/
+	if(radius==0) radius=this->quadtree->root->length;
+
+	/*First, find closest point in Quadtree (fast but might not be the true closest obs)*/
+	this->quadtree->ClosestObs(&index,x_interp,y_interp);
+	if(index>=0){
+		observation=dynamic_cast<Observation*>(this->GetObjectByOffset(index));
+		hmin = sqrt((observation->x-x_interp)*(observation->x-x_interp) + (observation->y-y_interp)*(observation->y-y_interp));
+		if(hmin<radius) radius=hmin;
+	}
+
+	/*Compute radius square*/
+	radius2 = radius*radius;
+
+	/*Find all observations that are in radius*/
+	this->quadtree->RangeSearch(&indices,&nobs,x_interp,y_interp,radius);
+	for (i=0;i<nobs;i++){
+		observation=dynamic_cast<Observation*>(this->GetObjectByOffset(indices[i]));
+		h2 = (observation->x-x_interp)*(observation->x-x_interp) + (observation->y-y_interp)*(observation->y-y_interp);
+		if(i==0){
+			hmin2 = h2;
+			index = indices[i];
+		}
+		else{
+			if(h2<hmin2){
+				hmin2 = h2;
+				index = indices[i];
+			}
+		}
+	}  
+
+	/*Assign output pointer*/
+	if(index>=0){
+		observation=dynamic_cast<Observation*>(this->GetObjectByOffset(index));
+		*px=observation->x;
+		*py=observation->y;
+		*pobs=observation->value;
+	}
+	else{
+
+		*px=UNDEF;
+		*py=UNDEF;
+		*pobs=UNDEF;
+	}
+	xDelete<int>(indices);
+
+}/*}}}*/
+/*FUNCTION Observations::Distances{{{*/
+void Observations::Distances(IssmPDouble* distances,IssmPDouble *x,IssmPDouble *y,int n,IssmPDouble radius){
+
+	IssmPDouble xi,yi,obs;
+
+	for(int i=0;i<n;i++){
+		this->ClosestObservation(&xi,&yi,&obs,x[i],y[i],radius);
+		if(xi==UNDEF && yi==UNDEF)
+		 distances[i]=UNDEF;
+		else
+		 distances[i]=sqrt( (x[i]-xi)*(x[i]-xi) + (y[i]-yi)*(y[i]-yi) );
+	}
+}/*}}}*/
+/*FUNCTION Observations::ObservationList(IssmPDouble **px,IssmPDouble **py,IssmPDouble **pobs,int* pnobs,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius,int maxdata){{{*/
+void Observations::ObservationList(IssmPDouble **px,IssmPDouble **py,IssmPDouble **pobs,int* pnobs,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius,int maxdata){
+
+	/*Output and Intermediaries*/
+	bool         stop;
+	int          nobs,tempnobs,i,j,k,n,counter;
+	IssmPDouble  h2,radius2;
+	int         *indices      = NULL;
+	int         *tempindices  = NULL;
+	IssmPDouble *dists        = NULL;
+	IssmPDouble *x            = NULL;
+	IssmPDouble *y            = NULL;
+	IssmPDouble *obs          = NULL;
+	Observation *observation  = NULL;
+
+	/*If radius is not provided or is 0, return all observations*/
+	if(radius==0) radius=this->quadtree->root->length;
+
+	/*Compute radius square*/
+	radius2 = radius*radius;
+
+	/*Find all observations that are in radius*/
+	this->quadtree->RangeSearch(&tempindices,&tempnobs,x_interp,y_interp,radius);
+	if(tempnobs){
+		indices = xNew<int>(tempnobs);
+		dists   = xNew<IssmPDouble>(tempnobs);
+	}
+	nobs = 0;
+	for (i=0;i<tempnobs;i++){
+		observation=dynamic_cast<Observation*>(this->GetObjectByOffset(tempindices[i]));
+		h2 = (observation->x-x_interp)*(observation->x-x_interp) + (observation->y-y_interp)*(observation->y-y_interp);
+
+		if(nobs==maxdata && h2>radius2) continue;
+		if(nobs<=maxdata){
+			indices[nobs]   = tempindices[i];
+			dists[nobs]     = h2;
+			nobs++;
+		}
+		if(nobs==1) continue;
+
+		/*Sort all dists up to now*/
+		n=nobs-1;
+		stop = false;
+		for(k=0;k<n-1;k++){
+			if(h2<dists[k]){
+				counter=1;
+				for(int jj=k;jj<n;jj++){
+					j  = n-counter;
+					dists[j+1]   = dists[j];
+					indices[j+1] = indices[j];
+					counter++;
+				}
+				dists[k]   = h2;
+				indices[k] = tempindices[i];
+				stop = true;
+				break;
+			}
+			if(stop) break;
+		}
+	}  
+	xDelete<IssmPDouble>(dists);
+	xDelete<int>(tempindices);
+
+	if(nobs){
+		/*Allocate vectors*/
+		x   = xNew<IssmPDouble>(nobs);
+		y   = xNew<IssmPDouble>(nobs);
+		obs = xNew<IssmPDouble>(nobs);
+
+		/*Loop over all observations and fill in x, y and obs*/
+		for (i=0;i<nobs;i++){
+			observation=dynamic_cast<Observation*>(this->GetObjectByOffset(indices[i]));
+			observation->WriteXYObs(&x[i],&y[i],&obs[i]);
+		}
+	}
+
+	/*Assign output pointer*/
+	xDelete<int>(indices);
+	*px=x;
+	*py=y;
+	*pobs=obs;
+	*pnobs=nobs;
+}/*}}}*/
+/*FUNCTION Observations::ObservationList(IssmPDouble **px,IssmPDouble **py,IssmPDouble **pobs,int* pnobs){{{*/
+void Observations::ObservationList(IssmPDouble **px,IssmPDouble **py,IssmPDouble **pobs,int* pnobs){
+
+	/*Output and Intermediaries*/
+	int          nobs;
+	IssmPDouble *x            = NULL;
+	IssmPDouble *y            = NULL;
+	IssmPDouble *obs          = NULL;
+	Observation *observation  = NULL;
+
+	nobs = this->Size();
+
+	if(nobs){
+		x   = xNew<IssmPDouble>(nobs);
+		y   = xNew<IssmPDouble>(nobs);
+		obs = xNew<IssmPDouble>(nobs);
+		for(int i=0;i<this->Size();i++){
+			observation=dynamic_cast<Observation*>(this->GetObjectByOffset(i));
+			observation->WriteXYObs(&x[i],&y[i],&obs[i]);
+		}
+	}
+
+	/*Assign output pointer*/
+	*px=x;
+	*py=y;
+	*pobs=obs;
+	*pnobs=nobs;
+}/*}}}*/
+/*FUNCTION Observations::InterpolationIDW{{{*/
+void Observations::InterpolationIDW(IssmPDouble *pprediction,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius,int mindata,int maxdata,IssmPDouble power){
+
+	/*Intermediaries*/
+	int         i,n_obs;
+	IssmPDouble prediction;
+	IssmPDouble numerator,denominator,h,weight;
+	IssmPDouble *x   = NULL;
+	IssmPDouble *y   = NULL;
+	IssmPDouble *obs = NULL;
+
+	/*Some checks*/
+	_assert_(maxdata>0);
+	_assert_(pprediction);
+	_assert_(power>0);
+
+	/*If radius is not provided or is 0, return all observations*/
+	if(radius==0) radius=this->quadtree->root->length;
+
+	/*Get list of observations for current point*/
+	this->ObservationList(&x,&y,&obs,&n_obs,x_interp,y_interp,radius,maxdata);
+
+	/*If we have less observations than mindata, return UNDEF*/
+	if(n_obs<mindata){
+		prediction = UNDEF; 
+	}
+	else{
+		numerator   = 0.;
+		denominator = 0.;
+		for(i=0;i<n_obs;i++){
+			h = sqrt( (x[i]-x_interp)*(x[i]-x_interp) + (y[i]-y_interp)*(y[i]-y_interp));
+			if (h<0.0000001){
+				numerator   = obs[i];
+				denominator = 1.;
+				break;
+			}
+			weight = 1./pow(h,power);
+			numerator   += weight*obs[i];
+			denominator += weight;
+		}
+		prediction = numerator/denominator; 
+	}
+
+	/*clean-up*/
+	*pprediction = prediction;
+	xDelete<IssmPDouble>(x);
+	xDelete<IssmPDouble>(y);
+	xDelete<IssmPDouble>(obs);
+}/*}}}*/
+/*FUNCTION Observations::InterpolationKriging{{{*/
+void Observations::InterpolationKriging(IssmPDouble *pprediction,IssmPDouble *perror,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius,int mindata,int maxdata,Variogram* variogram){
+
+	/*Intermediaries*/
+	int           i,j,n_obs;
+	IssmPDouble   prediction,error;
+	IssmPDouble   numerator,denominator,ratio;
+	IssmPDouble  *x            = NULL;
+	IssmPDouble  *y            = NULL;
+	IssmPDouble  *obs          = NULL;
+	IssmPDouble  *Gamma        = NULL;
+	IssmPDouble  *GinvG0       = NULL;
+	IssmPDouble  *Ginv1        = NULL;
+	IssmPDouble  *GinvZ        = NULL;
+	IssmPDouble  *gamma0       = NULL;
+	IssmPDouble  *ones         = NULL;
+
+	/*Some checks*/
+	_assert_(mindata>0 && maxdata>0);
+	_assert_(pprediction && perror);
+
+	/*If radius is not provided or is 0, return all observations*/
+	if(radius==0) radius=this->quadtree->root->length;
+
+	/*Get list of observations for current point*/
+	this->ObservationList(&x,&y,&obs,&n_obs,x_interp,y_interp,radius,maxdata);
+
+	/*If we have less observations than mindata, return UNDEF*/
+	if(n_obs<mindata){
+		*pprediction = -999.0; 
+		*perror      = -999.0; 
+		return;
+	}
+
+	/*Allocate intermediary matrix and vectors*/
+	Gamma  = xNew<IssmPDouble>(n_obs*n_obs);
+	gamma0 = xNew<IssmPDouble>(n_obs);
+	ones   = xNew<IssmPDouble>(n_obs);
+
+	/*First: Create semivariogram matrix for observations*/
+	for(i=0;i<n_obs;i++){
+		for(j=0;j<=i;j++){
+			//Gamma[i*n_obs+j] = variogram->SemiVariogram(x[i]-x[j],y[i]-y[j]);
+			Gamma[i*n_obs+j] = variogram->Covariance(x[i]-x[j],y[i]-y[j]);
+			Gamma[j*n_obs+i] = Gamma[i*n_obs+j];
+		}
+	}
+	for(i=0;i<n_obs;i++) ones[i]=1;
+
+	/*Get semivariogram vector associated to this location*/
+	//for(i=0;i<n_obs;i++) gamma0[i] = variogram->SemiVariogram(x[i]-x_interp,y[i]-y_interp);
+	for(i=0;i<n_obs;i++) gamma0[i] = variogram->Covariance(x[i]-x_interp,y[i]-y_interp);
+
+	/*Solve the three linear systems*/
+#if _HAVE_GSL_
+	DenseGslSolve(&GinvG0,Gamma,gamma0,n_obs); // Gamma^-1 gamma0
+	DenseGslSolve(&Ginv1, Gamma,ones,n_obs);   // Gamma^-1 ones
+	DenseGslSolve(&GinvZ, Gamma,obs,n_obs);    // Gamma^-1 Z
+#else
+	_error_("GSL is required");
+#endif
+
+	/*Prepare predictor*/
+	numerator=-1.; denominator=0.;
+	for(i=0;i<n_obs;i++) numerator  +=GinvG0[i];
+	for(i=0;i<n_obs;i++) denominator+=Ginv1[i];
+	ratio=numerator/denominator;
+
+	prediction = 0.;
+	error      = - numerator*numerator/denominator;
+	for(i=0;i<n_obs;i++) prediction += (gamma0[i]-ratio)*GinvZ[i];
+	for(i=0;i<n_obs;i++) error += gamma0[i]*GinvG0[i];
+
+	/*clean-up*/
+	*pprediction = prediction;
+	*perror = error;
+	xDelete<IssmPDouble>(x);
+	xDelete<IssmPDouble>(y);
+	xDelete<IssmPDouble>(obs);
+	xDelete<IssmPDouble>(Gamma);
+	xDelete<IssmPDouble>(gamma0);
+	xDelete<IssmPDouble>(ones);
+	xDelete<IssmPDouble>(GinvG0);
+	xDelete<IssmPDouble>(Ginv1);
+	xDelete<IssmPDouble>(GinvZ);
+
+}/*}}}*/
+/*FUNCTION Observations::InterpolationNearestNeighbor{{{*/
+void Observations::InterpolationNearestNeighbor(IssmPDouble *pprediction,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius){
+
+	/*Intermediaries*/
+	IssmPDouble x,y,obs;
+
+	/*Get clostest observation*/
+	this->ClosestObservation(&x,&y,&obs,x_interp,y_interp,radius);
+
+	/*Assign output pointer*/
+	*pprediction = obs;
+}/*}}}*/
+/*FUNCTION Observations::InterpolationV4{{{*/
+void Observations::InterpolationV4(IssmPDouble *pprediction,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius,int mindata,int maxdata){
+	/* Reference:  David T. Sandwell, Biharmonic spline interpolation of GEOS-3
+	 * and SEASAT altimeter data, Geophysical Research Letters, 2, 139-142,
+	 * 1987.  Describes interpolation using value or gradient of value in any
+	 * dimension.*/
+
+	/*Intermediaries*/
+	int         i,j,n_obs;
+	IssmPDouble prediction,h;
+	IssmPDouble *x       = NULL;
+	IssmPDouble *y       = NULL;
+	IssmPDouble *obs     = NULL;
+	IssmPDouble *Green   = NULL;
+	IssmPDouble *weights = NULL;
+	IssmPDouble *g       = NULL;
+
+	/*Some checks*/
+	_assert_(maxdata>0);
+	_assert_(pprediction);
+
+	/*If radius is not provided or is 0, return all observations*/
+	if(radius==0) radius=this->quadtree->root->length;
+
+	/*Get list of observations for current point*/
+	this->ObservationList(&x,&y,&obs,&n_obs,x_interp,y_interp,radius,maxdata);
+
+	/*If we have less observations than mindata, return UNDEF*/
+	if(n_obs<mindata || n_obs<2){
+		prediction = UNDEF; 
+	}
+	else{
+
+		/*Allocate intermediary matrix and vectors*/
+		Green = xNew<IssmPDouble>(n_obs*n_obs);
+		g     = xNew<IssmPDouble>(n_obs);
+
+		/*First: distance vector*/
+		for(i=0;i<n_obs;i++){
+			h = sqrt( (x[i]-x_interp)*(x[i]-x_interp) + (y[i]-y_interp)*(y[i]-y_interp) );
+			if(h>0){
+				g[i] = h*h*(log(h)-1.);
+			}
+			else{
+				g[i] = 0.;
+			}
+		}
+
+		/*Build Green function matrix*/
+		for(i=0;i<n_obs;i++){
+			for(j=0;j<=i;j++){
+				h = sqrt( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]) );
+				if(h>0){
+					Green[j*n_obs+i] = h*h*(log(h)-1.);
+				}
+				else{
+					Green[j*n_obs+i] = 0.;
+				}
+				Green[i*n_obs+j] = Green[j*n_obs+i];
+			}
+		}
+
+		/*Compute weights*/
+#if _HAVE_GSL_
+		DenseGslSolve(&weights,Green,obs,n_obs); // Green^-1 obs
+#else
+		_error_("GSL is required");
+#endif
+
+		/*Interpolate*/
+		prediction = 0;
+		for(i=0;i<n_obs;i++) prediction += weights[i]*g[i];
+
+	}
+
+	/*clean-up*/
+	*pprediction = prediction;
+	xDelete<IssmPDouble>(x);
+	xDelete<IssmPDouble>(y);
+	xDelete<IssmPDouble>(obs);
+	xDelete<IssmPDouble>(Green);
+	xDelete<IssmPDouble>(g);
+	xDelete<IssmPDouble>(weights);
+}/*}}}*/
+/*FUNCTION Observations::QuadtreeColoring{{{*/
+void Observations::QuadtreeColoring(IssmPDouble* A,IssmPDouble *x,IssmPDouble *y,int n){
+
+	int xi,yi,level;
+
+	for(int i=0;i<n;i++){
+		this->quadtree->IntergerCoordinates(&xi,&yi,x[i],y[i]);
+		this->quadtree->QuadtreeDepth(&level,xi,yi);
+		A[i]=(IssmPDouble)level;
+	}
+
+}/*}}}*/
+/*FUNCTION Observations::Variomap{{{*/
+void Observations::Variomap(IssmPDouble* gamma,IssmPDouble *x,int n){
+
+	/*Output and Intermediaries*/
+	int          i,j,k;
+	IssmPDouble  distance;
+	Observation *observation1 = NULL;
+	Observation *observation2 = NULL;
+
+	IssmPDouble *counter = xNew<IssmPDouble>(n);
+	for(j=0;j<n;j++) counter[j] = 0.0;
+	for(j=0;j<n;j++) gamma[j]   = 0.0;
+
+	for(i=0;i<this->Size();i++){
+		observation1=dynamic_cast<Observation*>(this->GetObjectByOffset(i));
+
+		for(j=i+1;j<this->Size();j++){
+			observation2=dynamic_cast<Observation*>(this->GetObjectByOffset(j));
+
+			distance=sqrt(pow(observation1->x - observation2->x,2.) + pow(observation1->y - observation2->y,2.));
+			if(distance>x[n-1]) continue;
+
+			int index = int(distance/(x[1]-x[0]));
+			if(index>n-1) index = n-1;
+			if(index<0)   index = 0;
+
+			gamma[index]   += 1./2.*pow(observation1->value - observation2->value,2.);
+			counter[index] += 1.;
+		}
+	}
+
+	/*Normalize semivariogram*/
+	gamma[0]=0.;
+	for(k=0;k<n;k++){
+		if(counter[k]) gamma[k] = gamma[k]/counter[k];
+	}
+
+	/*Assign output pointer*/
+	xDelete<IssmPDouble>(counter);
+}/*}}}*/
Index: issm/trunk-jpl/src/c/classes/kriging/Observations.h
===================================================================
--- issm/trunk-jpl/src/c/classes/kriging/Observations.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/kriging/Observations.h	(revision 14996)
@@ -0,0 +1,40 @@
+#ifndef _CONTAINER_OBSERVATIONS_H_
+#define  _CONTAINER_OBSERVATIONS_H_
+
+class Quadtree;
+class Variogram;
+class Options;
+#include "../objects/DataSet.h"
+#include "../../shared/shared.h"
+
+/*!\brief Declaration of Observations class.
+ *
+ * Declaration of Observations class.  Observations are vector lists (Containers) of Observation objects.
+ */ 
+
+class Observations: public DataSet{
+
+	private:
+		Quadtree* quadtree;
+
+	public:
+
+		/*constructors, destructors*/
+		Observations();
+		Observations(IssmDouble* observations_list,IssmDouble* x,IssmDouble* y,int n,Options* options);
+		~Observations();
+
+		/*Methods*/
+		void ClosestObservation(IssmDouble *px,IssmDouble *py,IssmDouble *pobs,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius);
+		void Distances(IssmPDouble* distances,IssmPDouble *x,IssmPDouble *y,int n,IssmPDouble radius);
+		void InterpolationIDW(IssmDouble *pprediction,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius,int mindata,int maxdata,IssmDouble power);
+		void InterpolationV4(IssmDouble *pprediction,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius,int mindata,int maxdata);
+		void InterpolationKriging(IssmDouble *pprediction,IssmDouble *perror,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius,int mindata,int maxdata,Variogram* variogram);
+		void InterpolationNearestNeighbor(IssmDouble *pprediction,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius);
+		void ObservationList(IssmDouble **px,IssmDouble **py,IssmDouble **pobs,int* pnobs);
+		void ObservationList(IssmDouble **px,IssmDouble **py,IssmDouble **pobs,int* pnobs,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius,int maxdata);
+		void QuadtreeColoring(IssmDouble* A,IssmDouble *x,IssmDouble *y,int n);
+		void Variomap(IssmDouble* gamma,IssmDouble *x,int n);
+
+};
+#endif //ifndef _OBSERVATIONS_H_
Index: issm/trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 #include "../objects/objects.h"
 #include "../../shared/shared.h"
-#include "../../Container/Container.h"
 
 /*PowerVariogram constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 #include "../objects/objects.h"
 #include "../../shared/shared.h"
-#include "../../Container/Container.h"
 
 /*SphericalVariogram constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/kriging/krigingobjects.h
===================================================================
--- issm/trunk-jpl/src/c/classes/kriging/krigingobjects.h	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/kriging/krigingobjects.h	(revision 14996)
@@ -14,4 +14,5 @@
 #include "./Quadtree.h"
 #include "./Observation.h"
+#include "./Observations.h"
 
 #endif
Index: issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 14996)
@@ -15,5 +15,4 @@
 #include "../classes.h"
 #include "../../shared/shared.h"
-#include "../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 14996)
@@ -15,5 +15,4 @@
 #include "../classes.h"
 #include "../../shared/shared.h"
-#include "../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Bucket.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Bucket.h	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Bucket.h	(revision 14996)
@@ -10,5 +10,5 @@
 #include "./Object.h"
 #include "../../shared/MemOps/MemOps.h"
-#include "../../Container/DataSet.h"
+#include "../../classes/objects/DataSet.h"
 #include "../../toolkits/toolkitsenums.h"
 /*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Constraints/Constraints.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Constraints/Constraints.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Constraints/Constraints.cpp	(revision 14996)
@@ -0,0 +1,41 @@
+/*
+ * \file Constraints.cpp
+ * \brief: Implementation of Constraints class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./Constraints.h"
+#include "../../../shared/shared.h"
+#include "../../../toolkits/toolkits.h"
+
+using namespace std;
+/*}}}*/
+
+
+/*Numerics: */
+/*FUNCTION Constraints::NumberOfConstraints{{{*/
+int Constraints::NumberOfConstraints(void){
+
+	int localconstraints;
+	int numberofconstraints;
+
+	/*Get number of local constraints*/
+	localconstraints=this->Size();
+
+	/*figure out total number of constraints combining all the cpus (no clones here)*/
+	#ifdef _HAVE_MPI_
+		MPI_Reduce(&localconstraints,&numberofconstraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+		MPI_Bcast(&numberofconstraints,1,MPI_INT,0,IssmComm::GetComm());
+	#else
+		numberofconstraints=localconstraints;
+	#endif
+
+	return numberofconstraints;
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Constraints/Constraints.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Constraints/Constraints.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Constraints/Constraints.h	(revision 14996)
@@ -0,0 +1,36 @@
+#ifndef _CONTAINER_CONSTRAINTS_H_
+#define  _CONTAINER_CONSTRAINTS_H_
+
+/*forward declarations */
+#include "../DataSet.h"
+#include "../../../shared/shared.h"
+
+/*! \brief Declaration of Constraints class. 
+ *
+ * Declaration of Constraints class for handling Single Point Constraints (SPCs).
+ * Constraints are vector lists (Containers) of Constraint objects.
+ */ 
+class Constraints: public DataSet{
+
+	public:
+
+		/*Object constructors and destructor*/
+		/*FUNCTION Constraints::Constraints(){{{*/
+		Constraints(){
+			enum_type=ConstraintsEnum;
+			return;
+		}
+		/*}}}*/
+		/*FUNCTION Constraints::~Constraints(){{{*/
+		~Constraints(){
+			return;
+		}
+		/*}}}*/
+
+
+		/*numerics*/
+		int   NumberOfConstraints(void);
+
+};
+
+#endif //ifndef _CONSTRAINTS_H_
Index: issm/trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/Enum/Enum.h"
-#include "../../../Container/Container.h"
 #include "../objects.h"
 
Index: issm/trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/Enum/Enum.h"
-#include "../../../Container/Container.h"
 #include "../objects.h"
 
Index: issm/trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/Enum/Enum.h"
-#include "../../../Container/Container.h"
 #include "../objects.h"
 
Index: issm/trunk-jpl/src/c/classes/objects/DataSet.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/DataSet.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/DataSet.cpp	(revision 14996)
@@ -0,0 +1,284 @@
+/*
+ * \file DataSet.cpp
+ * \brief: Implementation of DataSet class
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include <cstring>
+#include <vector>
+#include <functional>
+#include <algorithm>
+#include <iostream>
+
+#include "./DataSet.h"
+#include "../../shared/shared.h"
+
+using namespace std;
+/*}}}*/
+
+/*Constructors/Destructors*/
+/*FUNCTION DataSet::DataSet(){{{*/
+DataSet::DataSet(){
+
+	sorted=0;
+	sorted_ids=NULL;
+	id_offsets=NULL;
+
+}
+/*}}}*/
+/*FUNCTION DataSet::DataSet(int dataset_enum){{{*/
+DataSet::DataSet(int dataset_enum){
+	enum_type=dataset_enum;
+
+	sorted=0;
+	sorted_ids=NULL;
+	id_offsets=NULL;
+
+}
+/*}}}*/
+/*FUNCTION DataSet::Copy{{{*/
+DataSet*   DataSet::Copy(void){
+
+	vector<Object*>::iterator object;
+	Object* object_copy=NULL;
+
+	DataSet* copy=new DataSet(enum_type);
+
+	copy->sorted=sorted;
+	copy->presorted=presorted;
+	if(sorted_ids){
+		copy->sorted_ids=xNew<int>(objects.size());
+		xMemCpy<int>(copy->sorted_ids,sorted_ids,objects.size());
+	}
+	if(id_offsets){
+		copy->id_offsets=xNew<int>(objects.size());
+		xMemCpy<int>(copy->id_offsets,id_offsets,objects.size());
+	}
+
+	/*Now we need to deep copy the objects: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Call echo on object: */
+		object_copy = (*object)->copy();
+		copy->AddObject(object_copy);
+	}
+	return copy;
+}
+/*}}}*/
+/*FUNCTION DataSet::~DataSet{{{*/
+DataSet::~DataSet(){
+	clear();
+	xDelete<int>(sorted_ids);
+	xDelete<int>(id_offsets);
+}
+/*}}}*/
+
+/*Specific methods*/
+/*FUNCTION DataSet::AddObject{{{*/
+int  DataSet::AddObject(Object* object){
+
+	_assert_(this);
+	objects.push_back(object);
+
+	return 1;
+}
+/*}}}*/
+/*FUNCTION DataSet::clear{{{*/
+void  DataSet::clear(){
+
+/*  use reverse_iterator for efficiency in matlab memory manager
+	(keeping old code in case it needs to revert back)  */
+
+//	vector<Object*>::iterator object;
+	vector<Object*>::reverse_iterator object;
+
+//	for ( object=objects.begin() ; object < objects.end(); object++ ){
+//		delete (*object);
+//	}
+	for ( object=objects.rbegin() ; object < objects.rend(); object++ ){
+		delete (*object);
+	}
+	objects.clear();
+}
+/*}}}*/
+/*FUNCTION DataSet::DeleteObject{{{*/
+int  DataSet::DeleteObject(Object* object){
+
+	vector<Object*>::iterator iterator;
+
+	if(object){
+		iterator = find(objects.begin(), objects.end(),object);
+		delete *iterator;
+		objects.erase(iterator);
+	}
+
+	return 1;
+
+}
+/*}}}*/
+/*FUNCTION DataSet::DeepEcho{{{*/
+void DataSet::DeepEcho(){
+
+	vector<Object*>::iterator object;
+
+	if(this==NULL)_error_("trying to echo a NULL dataset");
+
+	_pprintLine_("DataSet echo: " << objects.size() << " objects");
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Call deep echo on object: */
+		(*object)->DeepEcho();
+
+	}
+}
+/*}}}*/
+/*FUNCTION DataSet::Echo{{{*/
+void DataSet::Echo(){
+
+	vector<Object*>::iterator object;
+
+	if(this==NULL)_error_("trying to echo a NULL dataset");
+
+	_pprintLine_("DataSet echo: " << objects.size() << " objects");
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Call echo on object: */
+		(*object)->Echo();
+
+	}
+	return;
+}
+/*}}}*/
+/*FUNCTION DataSet::GetEnum(){{{*/
+int  DataSet::GetEnum(){
+	return enum_type;
+}
+/*}}}*/
+/*FUNCTION DataSet::GetEnum(int offset){{{*/
+int   DataSet::GetEnum(int offset){
+
+	return objects[offset]->ObjectEnum();
+
+}
+/*}}}*/
+/*FUNCTION DataSet::GetObjectByOffset{{{*/
+Object* DataSet::GetObjectByOffset(int offset){
+
+	/*Check index in debugging mode*/
+	_assert_(this!=NULL);
+	_assert_(offset>=0);
+	_assert_(offset<this->Size());
+
+	return objects[offset];
+
+}
+/*}}}*/
+/*FUNCTION DataSet::GetObjectById{{{*/
+Object* DataSet::GetObjectById(int* poffset,int eid){
+
+	int id_offset;
+	int offset;
+
+	_assert_(this);
+	if(!sorted)_error_("trying to binary search on a non-sorted dataset!");
+
+	/*Carry out a binary search on the sorted_ids: */
+	if(!binary_search(&id_offset,eid,sorted_ids,objects.size())){
+		_error_("could not find object with id " << eid << " in DataSet " << EnumToStringx(enum_type));
+	}
+
+	/*Convert  the id offset into sorted offset: */
+	offset=id_offsets[id_offset];
+
+	/*Assign output pointers if requested:*/
+	if(poffset)*poffset=offset;
+
+	/*Return object at offset position in objects :*/
+	return objects[offset];
+}
+/*}}}*/
+/*FUNCTION DataSet::Presort{{{*/
+void DataSet::Presort(){
+
+	/*vector of objects is already sorted, just allocate the sorted ids and their
+	 * offsets:*/
+	if(objects.size()){
+
+		/*Delete existing ids*/
+		xDelete<int>(sorted_ids);
+		xDelete<int>(id_offsets);
+
+		/*Allocate new ids*/
+		sorted_ids=xNew<int>(objects.size());
+		id_offsets=xNew<int>(objects.size());
+
+		/*Build id_offsets and sorted_ids*/
+		for(int i=0;i<objects.size();i++){
+			id_offsets[i]=i;
+			sorted_ids[i]=objects[i]->Id();
+		}
+	}
+
+	/*set sorted flag: */
+	sorted=1;
+}
+/*}}}*/
+/*FUNCTION DataSet::Size{{{*/
+int  DataSet::Size(void){
+	_assert_(this!=NULL);
+
+	return objects.size();
+}
+/*}}}*/
+/*FUNCTION DataSet::Sort{{{*/
+void DataSet::Sort(){
+
+	/*Only sort if we are not already sorted: */
+	if(!sorted){
+		_error_("not implemented yet!");
+	}
+}
+/*}}}*/
+
+/*Routines that relate to datasets, but which are not methods: */
+int ExpWrite(DataSet* contours,char* domainname){/*{{{*/
+
+	/*I/O: */
+	FILE* fid=NULL;
+	Contour<double>* contour = NULL;
+
+	/*open domain outline file for writing: */
+	if((fid=fopen(domainname,"w"))==NULL) _error_("could not open domain file " << domainname); 
+
+	for(int counter=0;counter<contours->Size();counter++){
+		contour=(Contour<double>*)contours->GetObjectByOffset(counter);
+
+		/*Write header: */
+		fprintf(fid,"## Name:%s\n",domainname);
+		fprintf(fid,"## Icon:0\n");
+		fprintf(fid,"# Points Count	Value\n");
+		fprintf(fid,"%u %s\n",contour->nods  ,"1.");
+		fprintf(fid,"# X pos	Y pos\n");
+
+		/*Write vertices: */
+		for(int i=0;i<contour->nods;i++){
+			fprintf(fid,"%lf\t%lf\n",contour->x[i],contour->y[i]);
+		}
+
+		/*Write blank line: */
+		if(counter<contours->Size()-1) fprintf(fid,"\n");
+	}
+
+	/*close Exp file: */
+	fclose(fid);
+
+	return 1;
+}/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/DataSet.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/DataSet.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/DataSet.h	(revision 14996)
@@ -0,0 +1,87 @@
+#ifndef _CONTAINER_DATASET_H_
+#define _CONTAINER_DATASET_H_
+
+#include <vector>
+#include <cstring>
+#include "./Contour.h"
+#include "../../shared/Exp/exp.h"
+
+/*forward declarations */
+class Object;
+class Results;
+
+/*! \brief Declaration of DataSet class
+ *
+ * Declaration of DataSet class.  A DataSet is a Container of Objects.
+ */
+class DataSet{
+
+	public: 
+
+		/*internals: */
+		std::vector<Object*> objects;
+
+		/*type of dataset: */
+		int             enum_type;
+
+		/*sorting: */
+		int             sorted;
+		int             presorted;
+		int*            sorted_ids;
+		int*            id_offsets;
+
+		/*constructors, destructors*/
+		DataSet();
+		DataSet(int enum_type);
+		~DataSet();
+
+		/*management*/
+		int      GetEnum();
+		int      GetEnum(int offset);
+		void     Echo();
+		void     DeepEcho();
+		int      AddObject(Object *object);
+		int      DeleteObject(int id);
+		int      Size();
+		void     clear();
+		Object  *GetObjectByOffset(int  offset);
+		Object  *GetObjectById(int *poffset,int eid);
+		void     Presort();
+		void     Sort();
+		DataSet *Copy(void);
+		int      DeleteObject(Object *object);
+		Results *SpawnTriaResults(int *indices);
+
+};
+
+/*Methods that relate to datasets: */
+int ExpWrite(DataSet* contours,char* domainname);
+template <class doubletype> DataSet* ExpRead(char* domainname){ /*{{{*/
+
+	/*intermediary: */
+	int                  nprof;
+	int                 *profnvertices = NULL;
+	doubletype         **pprofx        = NULL;
+	doubletype         **pprofy        = NULL;
+
+	/*output: */
+	DataSet *domain = NULL;
+
+	/*If domainname is an empty string, return empty dataset*/
+	if (strcmp(domainname,"")==0){
+		nprof=0;
+	}
+	else{
+		ExpRead(&nprof,&profnvertices,&pprofx, &pprofy, NULL,domainname);
+	}
+
+	/*now create dataset of contours: */
+	domain=new DataSet(0);
+
+	for(int i=0;i<nprof;i++){
+		domain->AddObject(new Contour<doubletype>(i,profnvertices[i],pprofx[i],pprofy[i],1));
+	}
+	return domain;
+} /*}}}*/
+
+#endif
Index: issm/trunk-jpl/src/c/classes/objects/DependentObject.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../shared/Enum/Enum.h"
 #include "../../shared/shared.h"
-#include "../../Container/Container.h"
 
 /*DependentObject constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp	(revision 14996)
@@ -15,5 +15,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*BoolElementResult constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp	(revision 14996)
@@ -15,5 +15,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*DoubleElementResult constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp	(revision 14996)
@@ -15,5 +15,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*PentaP1ElementResult constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp	(revision 14996)
@@ -15,5 +15,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*TriaP1ElementResult constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/Elements/Element.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 14996)
@@ -16,4 +16,10 @@
 class Parameters;
 class Patch;
+class Elements;
+class Loads;
+class Node;
+class Nodes;
+class Vertices;
+class Materials;
 template <class doublematrix> class Matrix;
 template <class doubletype> class Vector;
Index: issm/trunk-jpl/src/c/classes/objects/Elements/Elements.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Elements/Elements.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Elements/Elements.cpp	(revision 14996)
@@ -0,0 +1,343 @@
+/*
+ * \file Elements.cpp
+ * \brief: Implementation of Elements class, derived from DataSet class
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./Element.h"
+#include "./Elements.h"
+#include "../Params/Parameters.h"
+#include "../ExternalResults/Results.h"
+#include "../ExternalResults/GenericExternalResult.h"
+#include "../../toolkits/toolkitobjects.h"
+#include "../../Patch.h"
+#include "../../../shared/shared.h"
+
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Elements::Elements(){{{*/
+Elements::Elements(){
+	enum_type=MeshElementsEnum;
+	return;
+}
+/*}}}*/
+/*FUNCTION Elements::~Elements(){{{*/
+Elements::~Elements(){
+	return;
+}
+/*}}}*/
+
+/*Object management*/
+/*FUNCTION Elements::Configure{{{*/
+void Elements::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+
+	vector<Object*>::iterator object;
+	Element* element=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		element=dynamic_cast<Element*>((*object));
+		element->Configure(elements,loads,nodes,vertices,materials,parameters);
+
+	}
+
+}
+/*}}}*/
+/*FUNCTION Elements::ProcessResultsUnits{{{*/
+void Elements::ProcessResultsUnits(void){
+
+	//Process results to be output in the correct units
+	for(int i=0;i<this->Size();i++){
+		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+		element->ProcessResultsUnits();
+	}
+}
+/*}}}*/
+/*FUNCTION Elements::DeleteResults{{{*/
+void Elements::DeleteResults(void){
+
+	for (int i=0;i<this->Size();i++){
+		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+		element->DeleteResults();
+	}
+}
+/*}}}*/
+/*FUNCTION Elements::ResultsToPatch{{{*/
+Patch* Elements::ResultsToPatch(void){ 
+
+	/*output: */
+	Patch* patch=NULL;
+
+	/*intermediary: */
+	int i;
+	int count;
+	int numrows;
+	int numvertices;
+	int numnodes;
+	int max_numvertices;
+	int max_numnodes;
+	int element_numvertices;
+	int element_numrows;
+	int element_numnodes;
+
+	/*We are going to extract from the results within the elements, the desired results , and create a table 
+	 * of patch information, that will hold, for each element that computed the result that 
+	 * we desire, the enum_type of the result, the step and time, the id of the element, the interpolation type, the vertices ids, and the values 
+	 * at the nodes (could be different from the vertices). This will be used for visualization purposes. 
+	 * For example, we could build the following patch table, for velocities: 
+	 * 
+	 1. on a Beam element, Vx, at step 1, time .5, element id 1, interpolation type P0 (constant), vertices ids 1 and 2, one constant value 4.5
+	 VxEnum 1  .5  1 P0  1 2       4.5 NaN  NaN
+	 2. on a Tria element, Vz, at step 2, time .8, element id 2, interpolation type P1 (linear), vertices ids 1 3 and 4, with values at 3 nodes 4.5, 3.2, 2.5
+	 VzEnum 2  .8  2 P1  1 3 4     4.5 3.2  2.5
+	 * ... etc ...
+	 *
+	 * So what do we need to build the table: the maximum number of vertices included in the table, 
+	 * and the maximum number of nodal values, as well as the number of rows. Once we have that, 
+	 * we ask the elements to fill their own row in the table, by looping on the elememnts. 
+	 *
+	 * We will use the Patch object, which will store all of the information needed, and will be able 
+	 * to output itself to disk on its own. See object/Patch.h for format of this object.*/
+
+	/*First, determine maximum number of vertices, nodes, and number of results: */
+	numrows=0;
+	numvertices=0;
+	numnodes=0;
+
+	for(i=0;i<this->Size();i++){
+
+		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+		element->PatchSize(&element_numrows,&element_numvertices,&element_numnodes);
+
+		numrows+=element_numrows;
+		if(element_numvertices>numvertices)numvertices=element_numvertices;
+		if(element_numnodes>numnodes)numnodes=element_numnodes;
+	}
+
+	/*Synchronize across cluster, so as to not end up with different sizes for each patch on each cpu: */
+	#ifdef _HAVE_MPI_
+	MPI_Reduce (&numvertices,&max_numvertices,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
+	MPI_Bcast(&max_numvertices,1,MPI_INT,0,IssmComm::GetComm());
+	numvertices=max_numvertices;
+
+	MPI_Reduce (&numnodes,&max_numnodes,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
+	MPI_Bcast(&max_numnodes,1,MPI_INT,0,IssmComm::GetComm());
+	numnodes=max_numnodes;
+	#endif
+
+	/*Ok, initialize Patch object: */
+	patch=new Patch(numrows,numvertices,numnodes);
+
+	/*Now, go through elements, and fill the Patch object: */
+	count=0;
+	for(i=0;i<this->Size();i++){
+		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+		element->PatchFill(&count,patch);
+	}
+
+	return patch;
+}
+/*}}}*/
+/*FUNCTION Elements::SetCurrentConfiguration{{{*/
+void Elements::SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+
+	vector<Object*>::iterator object;
+	Element* element=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		element=dynamic_cast<Element*>((*object));
+		element->SetCurrentConfiguration(elements,loads,nodes,materials,parameters);
+
+	}
+
+}
+/*}}}*/
+/*FUNCTION Elements::ToResults{{{*/
+void Elements::ToResults(Results* results,Parameters* parameters){
+
+	int my_rank;
+	int num_procs;
+
+	Patch               *patch              = NULL;
+	int                 *resultsenums       = NULL;
+	int                 *resultssizes       = NULL;
+	int                 *resultssteps       = NULL;
+	IssmDouble          *resultstimes       = NULL;
+	IssmDouble          *vector_serial      = NULL;
+	Vector<IssmDouble> *vector = NULL;
+	bool                io_gather;
+	bool                results_as_patches;
+	int                 numberofvertices     ,numberofelements;
+	int                 numberofresults      ,vectorsize;
+	int                 rank;
+	int                 minrank;
+
+	/*recover my_rank:*/
+	my_rank=IssmComm::GetRank();
+	num_procs=IssmComm::GetSize();
+
+	/*Recover parameters: */
+	parameters->FindParam(&io_gather,SettingsIoGatherEnum);
+	parameters->FindParam(&results_as_patches,SettingsResultsAsPatchesEnum);
+	parameters->FindParam(&numberofvertices,MeshNumberofverticesEnum);
+	parameters->FindParam(&numberofelements,MeshNumberofelementsEnum);
+
+	if(!results_as_patches){
+		/*No patch here, we prepare vectors*/
+
+		/*Get rank of first cpu that has results*/
+		#ifdef _HAVE_MPI_
+		if(this->Size()) rank=my_rank;
+		else rank=num_procs;
+		MPI_Allreduce (&rank,&minrank,1,MPI_INT,MPI_MIN,IssmComm::GetComm());
+		#else
+		minrank=my_rank;
+		#endif
+
+		/*see what the first element of this partition has in stock (this is common to all partitions)*/
+		if(my_rank==minrank){
+			if(this->Size()==0) _error_("Cannot write results because there is no element??");
+			Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(0));
+			element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
+		}
+		#ifdef _HAVE_MPI_
+		MPI_Bcast(&numberofresults,1,MPI_DOUBLE,minrank,IssmComm::GetComm());
+		#endif
+
+		/*Get out if there is no results. Otherwise broadcast info*/
+		if(!numberofresults) return;
+		#ifdef _HAVE_MPI_
+		if(my_rank!=minrank){
+			resultsenums=xNew<int>(numberofresults);
+			resultssizes=xNew<int>(numberofresults);
+			resultstimes=xNew<IssmDouble>(numberofresults);
+			resultssteps=xNew<int>(numberofresults);
+		}
+		MPI_Bcast(resultsenums,numberofresults,MPI_INT,minrank,IssmComm::GetComm());
+		MPI_Bcast(resultssizes,numberofresults,MPI_INT,minrank,IssmComm::GetComm());
+		MPI_Bcast(resultstimes,numberofresults,MPI_DOUBLE,minrank,IssmComm::GetComm());
+		MPI_Bcast(resultssteps,numberofresults,MPI_INT,minrank,IssmComm::GetComm());
+		#endif
+
+		/*Loop over all results and get nodal vector*/
+		for(int i=0;i<numberofresults;i++){
+
+			/*Get vector for result number i*/
+			if(resultssizes[i]==P1Enum)      vectorsize=numberofvertices;
+			else if(resultssizes[i]==P0Enum) vectorsize=numberofelements;
+			else _error_("Unkown result size: " << EnumToStringx(resultssizes[i]));
+			vector=new Vector<IssmDouble>(vectorsize);
+
+			for(int j=0;j<this->Size();j++){
+				Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(j));
+				element->GetVectorFromResults(vector,i,resultsenums[i],resultssizes[i]);
+			}
+			vector->Assemble();
+
+			/*Serialize and add to results*/
+			vector_serial=vector->ToMPISerial();
+			if(my_rank==0){
+				/*No need to add this vector for all cpus*/
+				#ifdef _HAVE_ADOLC_
+				IssmPDouble* vector_serial_passive=xNew<IssmPDouble>(vectorsize);
+				for(int k=0;k<vectorsize;k++)vector_serial_passive[k]=reCast<IssmPDouble>(vector_serial[k]);
+				results->AddObject(new GenericExternalResult<double*>(results->Size()+1,resultsenums[i],vector_serial_passive,vectorsize,1,resultssteps[i],resultstimes[i]));
+				xDelete<IssmPDouble>(vector_serial_passive);
+				#else
+				results->AddObject(new GenericExternalResult<double*>(results->Size()+1,resultsenums[i],vector_serial,vectorsize,1,resultssteps[i],resultstimes[i]));
+				#endif
+			}
+
+			/*clean up*/
+			delete vector;
+			xDelete<IssmDouble>(vector_serial);
+		}
+	}
+	else{
+		/*create patch object out of all results in this dataset: */
+		patch=this->ResultsToPatch();
+
+		/*Gather onto master cpu 0, if needed: */
+		if(io_gather)patch->Gather();
+
+		/*create result object and add to results dataset:*/
+		if (patch->maxvertices && patch->maxnodes){
+			results->AddObject(new GenericExternalResult<int>(results->Size()+1,PatchVerticesEnum,patch->maxvertices,1,0));
+			results->AddObject(new GenericExternalResult<int>(results->Size()+1,PatchNodesEnum,   patch->maxnodes,1,0));
+			#ifdef _HAVE_ADOLC_
+			IssmPDouble* values_passive=xNew<IssmPDouble>(patch->numrows*patch->numcols);
+			for(int k=0;k<(patch->numrows*patch->numcols);k++)values_passive[k]=reCast<IssmPDouble>(patch->values[k]);
+			results->AddObject(new GenericExternalResult<double*>(results->Size()+1,PatchEnum,  values_passive,patch->numrows,patch->numcols,1,0));
+			xDelete<IssmPDouble>(values_passive);
+			#else
+			results->AddObject(new GenericExternalResult<double*>(results->Size()+1,PatchEnum,  patch->values,patch->numrows,patch->numcols,1,0));
+			#endif
+		}
+	}
+
+	/*Free ressources:*/
+	xDelete<int>(resultsenums);
+	xDelete<int>(resultssizes);
+	xDelete<int>(resultssteps);
+	xDelete<IssmDouble>(resultstimes);
+	delete patch;
+}
+/*}}}*/
+/*FUNCTION Elements::MaxNumNodes{{{*/
+int Elements::MaxNumNodes(void){
+
+	int max=0;
+	int allmax;
+	int numnodes=0;
+
+	/*Now go through all elements, and get how many nodes they own, unless they are clone nodes: */
+	for(int i=0;i<this->Size();i++){
+
+		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+		numnodes=element->GetNumberOfNodes();
+		if(numnodes>max)max=numnodes;
+	}
+
+	/*Grab max of all cpus: */
+	#ifdef _HAVE_MPI_
+	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
+	max=allmax;
+	#endif
+
+	return max;
+}
+/*}}}*/
+/*FUNCTION Elements::NumberOfElements{{{*/
+int Elements::NumberOfElements(void){
+
+	int local_nelem;
+	int numberofelements;
+
+	local_nelem=this->Size();
+	#ifdef _HAVE_MPI_
+	MPI_Allreduce ( (void*)&local_nelem,(void*)&numberofelements,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+	#else
+	numberofelements=local_nelem;
+	#endif
+
+	return numberofelements;
+}
+/*}}}*/
+/*FUNCTION Elements::InputCopy{{{*/
+void Elements::InputDuplicate(int input_enum,int output_enum){
+
+	for(int i=0;i<this->Size();i++){
+		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+		element->InputDuplicate(input_enum,output_enum);
+	}
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Elements/Elements.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Elements/Elements.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Elements/Elements.h	(revision 14996)
@@ -0,0 +1,38 @@
+#ifndef _CONTAINER_ELEMENTS_H_
+#define  _CONTAINER_ELEMENTS_H_
+
+/*forward declarations */
+#include "../DataSet.h"
+class Materials;
+class Parameters;
+class Vertices;
+class Loads;
+class Nodes;
+class Patch;
+
+/*! \brief Declaration of Elements class 
+ *
+ * Declaration of Elements class.  Elements are vector lists (Containers) of Element objects.
+ */ 
+class Elements: public DataSet{
+
+	public:
+
+		/*constructors, destructors*/
+		Elements();
+		~Elements();
+
+		/*numerics*/
+		void   Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+		void   DeleteResults(void);
+		int    MaxNumNodes(void);
+		void   ProcessResultsUnits(void);
+		void   SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+		void   ToResults(Results* results,Parameters* parameters);
+		Patch* ResultsToPatch(void);
+		int    NumberOfElements(void);
+		void   InputDuplicate(int input_enum,int output_enum);
+
+};
+
+#endif //ifndef _ELEMENTS_H_
Index: issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 14996)
@@ -15,5 +15,4 @@
 #include "../../classes.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14996)
@@ -15,5 +15,4 @@
 #include "../../classes.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 #ifdef _HAVE_GIA_
 #include "../../../modules/GiaDeflectionCorex/GiaDeflectionCorex.h"
Index: issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 14996)
@@ -19,4 +19,5 @@
 class ElementMatrix;
 class ElementVector;
+class Vertex;
 
 #include "../../../shared/Exceptions/exceptions.h"
Index: issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Elements/TriaRef.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Elements/TriaRef.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Elements/TriaRef.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/ExternalResults/Results.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/ExternalResults/Results.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/ExternalResults/Results.cpp	(revision 14996)
@@ -0,0 +1,81 @@
+/*
+ * \file Results.cpp
+ * \brief: Implementation of the Results class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../Params/Parameters.h"
+#include "../../../shared/shared.h"
+#include "./Results.h"
+#include "./ExternalResult.h"
+#include "../ElementResults/ElementResult.h"
+
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Results::Results(){{{*/
+Results::Results(){
+	enum_type=ResultsEnum;
+	return;
+}
+/*}}}*/
+/*FUNCTION Results::~Results(){{{*/
+Results::~Results(){
+	return;
+}
+/*}}}*/
+
+/*Object management*/
+/*FUNCTION Results::SpawnTriaResults{{{*/
+Results* Results::SpawnTriaResults(int* indices){
+
+	/*Intermediary*/
+	vector<Object*>::iterator object;
+	ElementResult* resultin=NULL;
+	ElementResult* resultout=NULL;
+
+	/*Output*/
+	Results* newresults=new Results();
+
+	/*Go through results and call Spawn function*/
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Create new result*/
+		resultin=(ElementResult*)(*object); 
+		resultout=resultin->SpawnTriaElementResult(indices);
+
+		/*Add result to new results*/
+		newresults->AddObject((Object*)resultout);
+	}
+
+	/*Assign output pointer*/
+	return newresults;
+}
+/*}}}*/
+/*FUNCTION Results::Write{{{*/
+void Results::Write(Parameters* parameters){
+
+	int         i;
+	FILE       *fid          = NULL;
+	bool        io_gather=true;
+
+	/*Recover file descriptor: */
+	parameters->FindParam(&fid,OutputFilePointerEnum);
+	parameters->FindParam(&io_gather,SettingsIoGatherEnum);
+
+	for(i=0;i<this->Size();i++){
+		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
+
+		/*write result to disk: */
+		result->WriteData(fid,io_gather);
+	}
+
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/ExternalResults/Results.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/ExternalResults/Results.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/ExternalResults/Results.h	(revision 14996)
@@ -0,0 +1,25 @@
+#ifndef _CONTAINER_RESULTS_H_
+#define  _CONTAINER_RESULTS_H_
+
+#include "../DataSet.h"
+
+/*forward declarations */
+class Parameters;
+
+/*!\brief Declaration of Results class.
+ *
+ * Declaration of Results class.  Results are vector lists (Containers) of Result objects.
+ */ 
+class Results: public DataSet{
+
+	public:
+
+		/*constructors, destructors*/
+		Results();
+		~Results();
+
+		/*numerics*/
+		Results* SpawnTriaResults(int* indices);
+		void     Write(Parameters* parameters);
+};
+#endif //ifndef _RESULTS_H_
Index: issm/trunk-jpl/src/c/classes/objects/IndependentObject.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../shared/Enum/Enum.h"
 #include "../../shared/shared.h"
-#include "../../Container/Container.h"
 #include "../IoModel.h"
 
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*BoolInput constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*ControlInput constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*DoubleInput constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/Input.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/Input.h	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/Input.h	(revision 14996)
@@ -15,4 +15,5 @@
 class GaussPenta;
 template <class doubletype> class Vector;
+#include "../../../shared/shared.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/Inputs.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/Inputs.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/Inputs.cpp	(revision 14996)
@@ -0,0 +1,479 @@
+/*
+ * \file Inputs.c
+ * \brief: implementation of the Inputs class, derived from DataSet class
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./Input.h"
+#include "./Inputs.h"
+#include "../../../shared/shared.h"
+
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Inputs::Inputs(){{{*/
+Inputs::Inputs(){
+	return;
+}
+/*}}}*/
+/*FUNCTION Inputs::~Inputs(){{{*/
+Inputs::~Inputs(){
+	return;
+}
+/*}}}*/
+
+/*Object management*/
+/*FUNCTION Inputs::GetInputValue(bool* pvalue,int enum-type){{{*/
+void Inputs::GetInputValue(bool* pvalue,int enum_type){
+
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+	bool   found=false;
+
+	/*Go through inputs and check whether any input with the same name is already in: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=dynamic_cast<Input*>(*object);
+		if (input->InstanceEnum()==enum_type){
+			found=true;
+			break;
+		}
+	}
+
+	if (!found){
+		/*we could not find an input with the correct enum type. No defaults values were provided, 
+		 * error out: */
+		_error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+	}
+
+	/*Ok, we have an input if we made it here, request the input to return the value: */
+	input->GetInputValue(pvalue);
+
+}
+/*}}}*/
+/*FUNCTION Inputs::GetInputValue(int* pvalue,int enum-type){{{*/
+void Inputs::GetInputValue(int* pvalue,int enum_type){
+
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+	bool   found=false;
+
+	/*Go through inputs and check whether any input with the same name is already in: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=dynamic_cast<Input*>(*object);
+		if (input->InstanceEnum()==enum_type){
+			found=true;
+			break;
+		}
+	}
+
+	if (!found){
+		/*we could not find an input with the correct enum type. No defaults values were provided, 
+		 * error out: */
+		_error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+	}
+
+	/*Ok, we have an input if we made it here, request the input to return the value: */
+	input->GetInputValue(pvalue);
+
+}
+/*}}}*/
+/*FUNCTION Inputs::GetInputValue(IssmDouble* pvalue,int enum-type){{{*/
+void Inputs::GetInputValue(IssmDouble* pvalue,int enum_type){
+
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+	bool   found=false;
+
+	/*Go through inputs and check whether any input with the same name is already in: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=dynamic_cast<Input*>(*object); 
+		if (input->InstanceEnum()==enum_type){
+			found=true;
+			break;
+		}
+	}
+
+	if (!found){
+		/*we could not find an input with the correct enum type. No defaults values were provided, 
+		 * error out: */
+		_error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+	}
+
+	/*Ok, we have an input if we made it here, request the input to return the value: */
+	input->GetInputValue(pvalue);
+
+}
+/*}}}*/
+/*FUNCTION Inputs::GetInputAverage{{{*/
+void Inputs::GetInputAverage(IssmDouble* pvalue,int enum_type){
+
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+	bool   found=false;
+
+	/*Go through inputs and check whether any input with the same name is already in: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=dynamic_cast<Input*>(*object);
+		if (input->InstanceEnum()==enum_type){
+			found=true;
+			break;
+		}
+	}
+
+	if (!found){
+		/*we could not find an input with the correct enum type. No defaults values were provided, 
+		 * error out: */
+		_error_("could not find input with enum type " << enum_type << " (" << EnumToStringx(enum_type) << ")");
+	}
+
+	/*Ok, we have an input if we made it here, request the input to return the value: */
+	input->GetInputAverage(pvalue);
+
+}
+/*}}}*/
+/*FUNCTION Inputs::AddInput{{{*/
+int  Inputs::AddInput(Input* in_input){
+
+	/*First, go through dataset of inputs and check whether any input 
+	 * with the same name is already in. If so, erase the corresponding 
+	 * object before adding this new one: */
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+
+	/*In debugging mode, check that the input is not a NULL pointer*/
+	_assert_(in_input);
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=dynamic_cast<Input*>(*object);
+
+		if (input->InstanceEnum()==in_input->InstanceEnum()){
+			this->DeleteObject(input);
+			break;
+		}
+	}
+	this->AddObject(in_input);
+
+	return 1;
+}
+/*}}}*/
+/*FUNCTION Inputs::ChangeEnum{{{*/
+void  Inputs::ChangeEnum(int oldenumtype,int newenumtype){
+
+	/*Go through dataset of inputs and look for input with 
+	 * same enum as input enum, once found, just change its name */
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+
+	/*Delete existing input of newenumtype if it exists*/
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		input=dynamic_cast<Input*>(*object);
+
+		if (input->InstanceEnum()==newenumtype){
+			this->DeleteObject(input);
+			break;
+		}
+	}
+
+	/*Change enum_type of input of oldenumtype*/
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=dynamic_cast<Input*>(*object);
+
+		if (input->InstanceEnum()==oldenumtype){
+			input->ChangeEnum(newenumtype);
+			break;
+		}
+	}
+}
+/*}}}*/
+/*FUNCTION Inputs::ConstrainMin{{{*/
+void  Inputs::ConstrainMin(int constrain_enum, IssmDouble minimum){
+
+	/*Find x and y inputs: */
+	Input* constrain_input=dynamic_cast<Input*>(this->GetInput(constrain_enum));
+
+	/*some checks: */
+	if(!constrain_input) _error_("input " << EnumToStringx(constrain_enum) << " could not be found!");
+
+	/*Apply ContrainMin: */
+	constrain_input->ConstrainMin(minimum);
+}
+/*}}}*/
+/*FUNCTION Inputs::InfinityNorm{{{*/
+IssmDouble Inputs::InfinityNorm(int enumtype){
+
+	/*Output*/
+	IssmDouble norm;
+
+	/*Get input*/
+	Input* input=dynamic_cast<Input*>(this->GetInput(enumtype));
+
+	/*Apply ContrainMin: */
+	if (input){
+		norm=input->InfinityNorm();
+	}
+	else{
+		norm=0;
+	}
+
+	/*Return output*/
+	return norm;
+}
+/*}}}*/
+/*FUNCTION Inputs::Max{{{*/
+IssmDouble Inputs::Max(int enumtype){
+
+	/*Output*/
+	IssmDouble max;
+
+	/*Get input*/
+	Input* input=dynamic_cast<Input*>(this->GetInput(enumtype));
+
+	/*Apply ContrainMin: */
+	if (input){
+		max=input->Max();
+	}
+	else{
+		_error_("Input " << EnumToStringx(enumtype) << " not found");
+	}
+
+	/*Return output*/
+	return max;
+}
+/*}}}*/
+/*FUNCTION Inputs::MaxAbs{{{*/
+IssmDouble Inputs::MaxAbs(int enumtype){
+
+	/*Output*/
+	IssmDouble max;
+
+	/*Get input*/
+	Input* input=dynamic_cast<Input*>(this->GetInput(enumtype));
+
+	/*Apply ContrainMin: */
+	if (input){
+		max=input->MaxAbs();
+	}
+	else{
+		_error_("Input " << EnumToStringx(enumtype) << " not found");
+	}
+
+	/*Return output*/
+	return max;
+}
+/*}}}*/
+/*FUNCTION Inputs::Min{{{*/
+IssmDouble Inputs::Min(int enumtype){
+
+	/*Output*/
+	IssmDouble min;
+
+	/*Get input*/
+	Input* input=dynamic_cast<Input*>(this->GetInput(enumtype));
+
+	/*Apply ContrainMin: */
+	if (input){
+		min=input->Min();
+	}
+	else{
+		_error_("Input " << EnumToStringx(enumtype) << " not found");
+	}
+
+	/*Return output*/
+	return min;
+}
+/*}}}*/
+/*FUNCTION Inputs::MinAbs{{{*/
+IssmDouble Inputs::MinAbs(int enumtype){
+
+	/*Output*/
+	IssmDouble min;
+
+	/*Get input*/
+	Input* input=dynamic_cast<Input*>(this->GetInput(enumtype));
+
+	/*Apply ContrainMin: */
+	if (input){
+		min=input->MinAbs();
+	}
+	else{
+		_error_("Input " << EnumToStringx(enumtype) << " not found");
+	}
+
+	/*Return output*/
+	return min;
+}
+/*}}}*/
+/*FUNCTION Inputs::GetInput{{{*/
+Input* Inputs::GetInput(int enum_name){
+
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=dynamic_cast<Input*>(*object);
+
+		if (input->InstanceEnum()==enum_name){
+			return input;
+		}
+	}
+	return NULL;
+}
+/*}}}*/
+/*FUNCTION Inputs::DeleteInput{{{*/
+int  Inputs::DeleteInput(int enum_type){
+
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=dynamic_cast<Input*>(*object);
+
+		if (input->InstanceEnum()==enum_type){
+			this->DeleteObject(input);
+			break;
+		}
+	}
+
+	return 1;
+
+}
+/*}}}*/
+/*FUNCTION Inputs::DuplicateInput{{{*/
+void  Inputs::DuplicateInput(int original_enum,int new_enum){
+
+	/*Make a copy of the original input: */
+	Input* original=dynamic_cast<Input*>(this->GetInput(original_enum));
+	if(!original)_error_("could not find input with enum: " << EnumToStringx(original_enum)); 
+	Input* copy=dynamic_cast<Input*>(original->copy());
+
+	/*Change copy enum to reinitialized_enum: */
+	copy->ChangeEnum(new_enum);
+
+	/*Add copy into inputs, it will wipe off the one already there: */
+	this->AddInput(dynamic_cast<Input*>(copy));
+}
+/*}}}*/
+/*FUNCTION Inputs::SpawnTriaInputs{{{*/
+Inputs* Inputs::SpawnTriaInputs(int* indices){
+
+	/*Intermediary*/
+	vector<Object*>::iterator object;
+	Input* inputin=NULL;
+	Input* inputout=NULL;
+
+	/*Output*/
+	Inputs* newinputs=new Inputs();
+
+	/*Go through inputs and call Spawn function*/
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Create new input*/
+		inputin=dynamic_cast<Input*>(*object);
+		inputout=inputin->SpawnTriaInput(indices);
+
+		/*Add input to new inputs*/
+		newinputs->AddObject(inputout);
+	}
+
+	/*Assign output pointer*/
+	return newinputs;
+}
+/*}}}*/
+/*FUNCTION Inputs::AXPY{{{*/
+void  Inputs::AXPY(int MeshYEnum, IssmDouble scalar, int MeshXEnum){
+
+	/*Find x and y inputs: */
+	Input* xinput=dynamic_cast<Input*>(this->GetInput(MeshXEnum));
+	Input* yinput=dynamic_cast<Input*>(this->GetInput(MeshYEnum));
+
+	/*some checks: */
+	if(!xinput) _error_("input " << EnumToStringx(MeshXEnum) << " could not be found!");
+	if(!yinput) _error_("input " << EnumToStringx(MeshYEnum) << " could not be found!");
+
+	/*Apply AXPY: */
+	yinput->AXPY(xinput,scalar);
+}
+/*}}}*/
+/*FUNCTION Inputs::Configure{{{*/
+void Inputs::Configure(Parameters* parameters){
+
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=dynamic_cast<Input*>(*object);
+		input->Configure(parameters);
+
+	}
+
+}
+/*}}}*/
+
+/*Methods relating to inputs: */
+void IsInputConverged(IssmDouble* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum){ /*{{{*/
+ 
+	/*figure out convergence at the input level. 
+	  We are given a list of inputs, new and old, and a criterion, and using the
+	  inputs, we return the value of the criterion test, which will be used at the
+	  solution level to determine convergence.
+	  */ 
+
+	int i,j;
+
+	/*output: */
+	IssmDouble eps;
+
+	/*intermediary: */
+	IssmDouble *newvalues     = NULL;
+	IssmDouble *oldvalues     = NULL;
+	int     num_values;
+	IssmDouble  ndu        = 0;
+	IssmDouble  nu         = 0;
+
+	if(criterion_enum==RelativeEnum){
+
+		/*conpute ndu/du (where u could be velocity, pressure, temperature, etc ...): */
+		for(i=0;i<num_inputs;i++){
+
+			/*in debugging mode, check that the inputs are of the same type*/
+			_assert_(new_inputs[i]->ObjectEnum()==old_inputs[i]->ObjectEnum());
+
+			/*Get pointers*/
+			new_inputs[i]->GetValuesPtr(&newvalues,&num_values);
+			old_inputs[i]->GetValuesPtr(&oldvalues,&num_values);
+			for(j=0;j<num_values;j++){
+				ndu+=pow(newvalues[j]-oldvalues[j],2);
+				nu+=pow(oldvalues[j],2);
+			}
+		}
+
+		/*take square root: */
+		ndu=sqrt(ndu);
+		nu=sqrt(nu);
+
+		/*now, compute eps: */
+		if(reCast<bool>(nu))eps=ndu/nu;
+		else eps=0;
+	}
+	else _error_("convergence criterion " << EnumToStringx(criterion_enum) << " not supported yet!");
+
+	/*Assign output pointers:*/
+	*peps=eps;
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/Inputs.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/Inputs.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/Inputs.h	(revision 14996)
@@ -0,0 +1,48 @@
+#ifndef _CONTAINER_INPUTS_H_
+#define  _CONTAINER_INPUTS_H_
+
+/*forward declarations */
+class Parameters;
+class Input;
+
+#include "../DataSet.h"
+#include "../../../shared/shared.h"
+
+/*! \brief Declaration of Inputs class.
+ *
+ * Declaration of Inputs class.  Inputs are vector lists (Containers) of Input objects.
+ */ 
+class Inputs: public DataSet{
+
+	public:
+
+		/*constructors, destructors*/
+		Inputs();
+		~Inputs();
+
+		/*numerics*/
+		int        AddInput(Input* in_input);
+		void       ChangeEnum(int enumtype,int new_enumtype);
+		void       ConstrainMin(int constrain_enum, IssmDouble minimum);
+		int        DeleteInput(int enum_type);
+		void       DuplicateInput(int original_enum,int new_enum);
+		Input*     GetInput(int enum_name);
+		Inputs*    SpawnTriaInputs(int* indices);
+		void       AXPY(int MeshYEnum, IssmDouble scalar, int MeshXEnum);
+		IssmDouble  InfinityNorm(int enumtype);
+		IssmDouble  Max(int enumtype);
+		IssmDouble  MaxAbs(int enumtype);
+		IssmDouble  Min(int enumtype);
+		IssmDouble  MinAbs(int enumtype);
+		void GetInputAverage(IssmDouble* pvalue, int enum_type);
+		void GetInputValue(bool* pvalue,int enum_type);
+		void GetInputValue(int* pvalue,int enum_type);
+		void GetInputValue(IssmDouble* pvalue,int enum_type);
+		void Configure(Parameters* parameters);
+
+};
+
+/*Methods relating to inputs: */
+void IsInputConverged(IssmDouble* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum);
+
+#endif //ifndef _INPUTS_H_
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*IntInput constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*PentaP1Input constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*TriaP1Input constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Attribute.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Attribute.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Attribute.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_ColorStyle.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_ColorStyle.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_ColorStyle.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Comment.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Comment.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Comment.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Container.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Container.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Container.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Document.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Document.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Document.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Feature.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Feature.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Feature.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_File.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_File.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_File.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Folder.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Folder.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Folder.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Geometry.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Geometry.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Geometry.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_GroundOverlay.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_GroundOverlay.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_GroundOverlay.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Icon.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Icon.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Icon.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_LineString.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_LineString.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_LineString.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 #include "../../../modules/Ll2xyx/Ll2xyx.h"
 /*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 #include "../../../modules/Ll2xyx/Ll2xyx.h"
 /*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_MultiGeometry.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_MultiGeometry.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_MultiGeometry.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Object.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Object.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Object.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Overlay.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Overlay.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Overlay.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Placemark.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Placemark.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Placemark.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Point.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Point.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Point.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 #include "../../../modules/Ll2xyx/Ll2xyx.h"
 /*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Polygon.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Polygon.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Polygon.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Style.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Style.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Style.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/KML/KML_Unknown.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/KML/KML_Unknown.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/KML/KML_Unknown.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../../shared/io/io.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Loads/Friction.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Loads/Friction.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Loads/Friction.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include <string.h>
 #include "../../classes.h"
-#include "../../../Container/Container.h"
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
Index: issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 14996)
@@ -16,6 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Inputs.h"
-#include "../../../Container/Parameters.h"
 /*}}}*/	
 
Index: issm/trunk-jpl/src/c/classes/objects/Loads/Loads.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Loads/Loads.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Loads/Loads.cpp	(revision 14996)
@@ -0,0 +1,190 @@
+/*
+ * \file Loads.cpp
+ * \brief: Implementation of Loads class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include <vector>
+#include <functional>
+#include <algorithm>
+#include <iostream>
+
+#include "./Loads.h"
+#include "../../../shared/shared.h"
+#include "./Load.h"
+
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Loads::Loads(){{{*/
+Loads::Loads(){
+	enum_type=LoadsEnum;
+	return;
+}
+/*}}}*/
+/*FUNCTION Loads::~Loads(){{{*/
+Loads::~Loads(){
+	return;
+}
+/*}}}*/
+
+/*Numerics:*/
+/*FUNCTION Loads::Configure{{{*/
+void Loads::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+
+	vector<Object*>::iterator object;
+	Load* load=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		load=dynamic_cast<Load*>(*object);
+		load->Configure(elements,loads,nodes,vertices,materials,parameters);
+
+	}
+
+}
+/*}}}*/
+/*FUNCTION Loads::IsPenalty{{{*/
+bool Loads::IsPenalty(int analysis_type){
+
+	int ispenalty=0;
+	int allispenalty=0;
+
+	/*Now go through all loads, and get how many nodes they own, unless they are clone nodes: */
+	for(int i=0;i<this->Size();i++){
+
+		Load* load=dynamic_cast<Load*>(this->GetObjectByOffset(i));
+		if (load->InAnalysis(analysis_type)){
+			if(load->IsPenalty()) ispenalty++;
+		}
+	}
+
+	/*Grab sum of all cpus: */
+#ifdef _HAVE_MPI_
+	MPI_Allreduce((void*)&ispenalty,(void*)&allispenalty,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+	ispenalty=allispenalty;
+#endif
+
+	if(ispenalty)
+	 return true;
+	else
+	 return false;
+}
+/*}}}*/
+/*FUNCTION Loads::MaxNumNodes{{{*/
+int Loads::MaxNumNodes(int analysis_type){
+
+	int max=0;
+	int allmax;
+	int numnodes=0;
+
+	/*Now go through all loads, and get how many nodes they own, unless they are clone nodes: */
+	for(int i=0;i<this->Size();i++){
+
+		Load* load=dynamic_cast<Load*>(this->GetObjectByOffset(i));
+		if (load->InAnalysis(analysis_type)){
+			numnodes=load->GetNumberOfNodes();
+			if(numnodes>max)max=numnodes;
+		}
+	}
+
+	/*Grab max of all cpus: */
+#ifdef _HAVE_MPI_
+	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
+	max=allmax;
+#endif
+
+	return max;
+}
+/*}}}*/
+/*FUNCTION Loads::NumberOfLoads(){{{*/
+int Loads::NumberOfLoads(void){
+
+	int localloads;
+	int numberofloads;
+
+	/*Get number of local loads*/
+	localloads=this->Size();
+
+	/*figure out total number of loads combining all the cpus (no clones here)*/
+	#ifdef _HAVE_MPI_
+	MPI_Reduce(&localloads,&numberofloads,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+	MPI_Bcast(&numberofloads,1,MPI_INT,0,IssmComm::GetComm());
+	#else
+	numberofloads=localloads;
+	#endif
+
+	return numberofloads;
+}
+/*}}}*/
+/*FUNCTION Loads::NumberOfLoads(int analysis){{{*/
+int Loads::NumberOfLoads(int analysis_type){
+
+	int localloads = 0;
+	int numberofloads;
+
+	/*Get number of local loads*/
+	for(int i=0;i<this->Size();i++){
+
+		Load* load=dynamic_cast<Load*>(this->GetObjectByOffset(i));
+
+		/*Check that this load corresponds to our analysis currently being carried out: */
+		if (load->InAnalysis(analysis_type)) localloads++;
+	}
+
+	/*figure out total number of loads combining all the cpus (no clones here)*/
+#ifdef _HAVE_MPI_
+	MPI_Reduce(&localloads,&numberofloads,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+	MPI_Bcast(&numberofloads,1,MPI_INT,0,IssmComm::GetComm());
+#else
+	numberofloads=localloads;
+#endif
+
+	return numberofloads;
+}
+/*}}}*/
+/*FUNCTION Loads::Size(){{{*/
+int Loads::Size(void){
+
+	return this->DataSet::Size();
+}
+/*}}}*/
+/*FUNCTION Loads::Size(int analysis){{{*/
+int Loads::Size(int analysis_type){
+
+	int localloads = 0;
+
+	/*Get number of local loads*/
+	for(int i=0;i<this->Size();i++){
+
+		Load* load=dynamic_cast<Load*>(this->GetObjectByOffset(i));
+
+		/*Check that this load corresponds to our analysis currently being carried out: */
+		if (load->InAnalysis(analysis_type)) localloads++;
+	}
+
+	return localloads;
+}
+/*}}}*/
+/*FUNCTION Loads::SetCurrentConfiguration{{{*/
+void Loads::SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+
+	vector<Object*>::iterator object;
+	Load* load=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		load=dynamic_cast<Load*>(*object);
+		load->SetCurrentConfiguration(elements,loads,nodes,vertices,materials,parameters);
+
+	}
+
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Loads/Loads.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Loads/Loads.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Loads/Loads.h	(revision 14996)
@@ -0,0 +1,36 @@
+#ifndef _CONTAINER_LOADS_H_
+#define  _CONTAINER_LOADS_H_
+
+/*forward declarations */
+#include "../DataSet.h"
+class Materials;
+class Parameters;
+class Elements;
+class Vertices;
+class Nodes;
+
+/*!\brief Declaration of Loads class.
+ *
+ * Declaration of Loads class.  Loads are vector lists (Containers) of Load objects.
+ */ 
+class Loads: public DataSet{
+
+	public:
+
+		/*constructors, destructors*/
+		Loads();
+		~Loads();
+
+		/*numerics*/
+		void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+		bool  IsPenalty(int analysis);
+		int   MaxNumNodes(int analysis);
+		int   NumberOfLoads(void);
+		int   NumberOfLoads(int analysis);
+		void  SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+		int   Size(int analysis);
+		int   Size(void);
+
+};
+
+#endif //ifndef _LOADS_H_
Index: issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 14996)
@@ -16,6 +16,4 @@
 #include "../../../shared/shared.h"
 #include "../../classes.h"
-#include "../../../Container/Inputs.h"
-#include "../../../Container/Parameters.h"
 /*}}}*/	
 
Index: issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Parameters.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp	(revision 14996)
@@ -14,6 +14,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Inputs.h"
-#include "../../../Container/Parameters.h"
 
 /*Matdamageice constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/Materials/Material.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Materials/Material.h	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Materials/Material.h	(revision 14996)
@@ -12,4 +12,5 @@
 #include "../Object.h"
 #include "../../Update.h"
+class Elements;
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Materials/Materials.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Materials/Materials.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Materials/Materials.cpp	(revision 14996)
@@ -0,0 +1,48 @@
+/*
+ * \file Materials.cpp
+ * \brief: Implementation of Materials class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./Materials.h"
+#include "../../../shared/shared.h"
+#include "./Material.h"
+
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Materials::Materials(){{{*/
+Materials::Materials(){
+	enum_type=MaterialsEnum;
+	return;
+}
+/*}}}*/
+/*FUNCTION Materials::~Materials(){{{*/
+Materials::~Materials(){
+	return;
+}
+/*}}}*/
+
+/*Object management*/
+/*FUNCTION Materials::Configure{{{*/
+void Materials::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+
+	vector<Object*>::iterator object;
+	Material* material=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		material=dynamic_cast<Material*>(*object);
+		material->Configure(elements);
+
+	}
+
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Materials/Materials.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Materials/Materials.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Materials/Materials.h	(revision 14996)
@@ -0,0 +1,29 @@
+#ifndef _CONTAINER_MATERIALS_H_
+#define  _CONTAINER_MATERIALS_H_
+
+/*forward declarations */
+#include "../DataSet.h"
+class Parameters;
+class Elements;
+class Vertices;
+class Loads;
+class Nodes;
+
+/*! \brief Declaration of Materials class.
+ *
+ * Declaration of Materials class.  Materials are vector lists (Containers) of Material objects.
+ */ 
+class Materials: public DataSet{
+
+	public:
+
+		/*constructors, destructors*/
+		Materials();
+		~Materials();
+
+		/*numerics*/
+		void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+
+};
+
+#endif //ifndef _MATERIALS_H_
Index: issm/trunk-jpl/src/c/classes/objects/Materials/Matice.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Materials/Matice.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Materials/Matice.cpp	(revision 14996)
@@ -11,9 +11,19 @@
 #include <stdio.h>
 #include <string.h>
-#include "../../classes.h"
-#include "../../../shared/Enum/Enum.h"
+#include "./Matice.h"
+#include "./Materials.h"
+#include "../Inputs/Input.h"
+#include "../Inputs/Inputs.h"
+#include "../Inputs/TriaP1Input.h"
+#include "../Inputs/PentaP1Input.h"
+#include "../Inputs/ControlInput.h"
+#include "../Elements/Element.h"
+#include "../Elements/Tria.h"
+#include "../Elements/Penta.h"
+#include "../Params/Parameters.h"
+#include "../../Hook.h"
+#include "../Node.h"
+#include "../../IoModel.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Inputs.h"
-#include "../../../Container/Parameters.h"
 
 /*Matice constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/Materials/Matice.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Materials/Matice.h	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Materials/Matice.h	(revision 14996)
@@ -9,5 +9,14 @@
 /*{{{*/
 #include "./Material.h"
+#include "../../Hook.h"
 class IoModel;
+		
+class Elements;
+class Loads;
+class Nodes;
+class Vertices;
+class Materials;
+class Parameters;
+
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Node.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Node.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Node.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 #include <string.h>
 #include "./objects.h"
-#include "../../Container/Container.h"
 #include "../../shared/Enum/Enum.h"
 #include "../../shared/shared.h"
Index: issm/trunk-jpl/src/c/classes/objects/Nodes.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Nodes.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Nodes.cpp	(revision 14996)
@@ -0,0 +1,355 @@
+/*
+ * \file Nodes.cpp
+ * \brief: Implementation of Nodes class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./Nodes.h"
+#include "../../shared/shared.h"
+#include "./Node.h"
+
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Nodes::Nodes(){{{*/
+Nodes::Nodes(){
+	enum_type=NodesEnum;
+	return;
+}
+/*}}}*/
+/*FUNCTION Nodes::~Nodes(){{{*/
+Nodes::~Nodes(){
+	return;
+}
+/*}}}*/
+
+/*Numerics*/
+/*FUNCTION Nodes::Configure{{{*/
+void Nodes::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+
+	vector<Object*>::iterator object;
+	Node* node=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		node=dynamic_cast<Node*>(*object);
+		node->Configure(nodes,vertices);
+
+	}
+
+}
+/*}}}*/
+/*FUNCTION Nodes::DistributeDofs{{{*/
+void  Nodes::DistributeDofs(int analysis_type,int setenum){
+
+	int  i;
+	int  dofcount=0;
+	int  maxdofspernode=0;
+	int* alldofcount=NULL;
+	int* truedofs=NULL;
+	int* alltruedofs=NULL;
+	int  numnodes=0;
+
+	/*recover my_rank:*/
+	int my_rank   = IssmComm::GetRank();
+	int num_procs = IssmComm::GetSize();
+
+	/*some check: */
+	_assert_(setenum==GsetEnum || setenum==FsetEnum || setenum==SsetEnum);
+
+	/*Go through objects, and distribute dofs locally, from 0 to numberofdofsperobject*/
+	for (i=0;i<this->Size();i++){
+		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+
+		/*Check that this node corresponds to our analysis currently being carried out: */
+		if (node->InAnalysis(analysis_type)){
+			node->DistributeDofs(&dofcount,setenum);
+		}
+	}
+
+	/* Now every object has distributed dofs, but locally, and with a dof count starting from 
+	 * 0. This means the dofs between all the cpus are not unique. We now offset the dofs of eache
+	 * cpus by the total last dofs of the previus cpu, starting from 0.
+	 * First: get number of dofs for each cpu*/
+	alldofcount=xNew<int>(num_procs);
+	#ifdef _HAVE_MPI_
+	MPI_Gather(&dofcount,1,MPI_INT,alldofcount,1,MPI_INT,0,IssmComm::GetComm());
+	MPI_Bcast(alldofcount,num_procs,MPI_INT,0,IssmComm::GetComm());
+	#else
+	alldofcount[0]=dofcount;
+	#endif
+
+	/* Every cpu should start its own dof count at the end of the dofcount from cpu-1*/
+	dofcount=0;
+	for(i=0;i<my_rank;i++){
+		dofcount+=alldofcount[i];
+	}
+	for (i=0;i<this->Size();i++){
+		/*Check that this node corresponds to our analysis currently being carried out: */
+		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+		if (node->InAnalysis(analysis_type)){
+			node->OffsetDofs(dofcount,setenum);
+		}
+	}
+
+	/* Finally, remember that cpus may have skipped some objects, because they were clones. For every 
+	 * object that is not a clone, tell them to show their dofs, so that later on, they can get picked 
+	 * up by their clones: */
+	maxdofspernode=this->MaxNumDofs(analysis_type,setenum);
+	numnodes=this->NumberOfNodes(analysis_type);
+	if(numnodes*maxdofspernode){
+		truedofs=   xNewZeroInit<int>(numnodes*maxdofspernode); //initialize to 0, so that we can pick up the max
+		alltruedofs=xNewZeroInit<int>(numnodes*maxdofspernode);
+	}
+
+	for (i=0;i<this->Size();i++){
+		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+		if (node->InAnalysis(analysis_type)){
+			node->ShowTrueDofs(truedofs,maxdofspernode,setenum);//give maxdofspernode, column size, so that nodes can index into truedofs
+		}
+	}
+
+	#ifdef _HAVE_MPI_
+	MPI_Allreduce((void*)truedofs,(void*)alltruedofs,numnodes*maxdofspernode,MPI_INT,MPI_MAX,IssmComm::GetComm());
+	#else
+	for(i=0;i<numnodes*maxdofspernode;i++)alltruedofs[i]=truedofs[i];
+	#endif
+
+	/* Now every cpu knows the true dofs of everyone else that is not a clone*/
+	for (i=0;i<this->Size();i++){
+		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+		if (node->InAnalysis(analysis_type)){
+			node->UpdateCloneDofs(alltruedofs,maxdofspernode,setenum);
+		}
+	}
+
+	/* Free ressources: */
+	xDelete<int>(alldofcount);
+	xDelete<int>(truedofs);
+	xDelete<int>(alltruedofs);
+}
+/*}}}*/
+/*FUNCTION Nodes::FlagClones{{{*/
+void  Nodes::FlagClones(int analysis_type){
+
+	int i;
+	int num_procs;
+	int numnodes;
+
+	/*recover num_procs: */
+	num_procs=IssmComm::GetSize();
+
+	/*Figure out number of nodes for this analysis: */
+	numnodes=this->NumberOfNodes(analysis_type);
+
+	/*Allocate ranks: */
+	int* ranks    = xNew<int>(numnodes);
+	int* minranks = xNew<int>(numnodes);
+	for(i=0;i<numnodes;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
+
+	/*Now go through all our objects and ask them to report to who they belong (which rank): */
+	Ranks(ranks,analysis_type);
+
+	/*We need to take the minimum rank for each vertex, and every cpu needs to get that result. That way, 
+	 * when we start building the dof list for all vertexs, a cpu can check whether its vertex already has been 
+	 * dealt with by another cpu. We take the minimum because we are going to manage dof assignment in increasing 
+	 * order of cpu rank. This is also why we initialized this array to num_procs.*/
+	#ifdef _HAVE_MPI_
+	MPI_Allreduce((void*)ranks,(void*)minranks,numnodes,MPI_INT,MPI_MIN,IssmComm::GetComm());
+	#else
+	for(i=0;i<numnodes;i++)minranks[i]=ranks[i];
+	#endif
+
+	/*Now go through all objects, and use minranks to flag which objects are cloned: */
+	for(i=0;i<this->Size();i++){
+
+		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+
+		/*Check that this node corresponds to our analysis currently being carried out: */
+		if (node->InAnalysis(analysis_type)){
+
+			/*For this object, decide whether it is a clone: */
+			node->SetClone(minranks);
+		}
+	}
+
+	/*Free ressources: */
+	xDelete<int>(ranks); 
+	xDelete<int>(minranks);
+
+}
+/*}}}*/
+/*FUNCTION Nodes::MaxNumDofs{{{*/
+int   Nodes::MaxNumDofs(int analysis_type,int setenum){
+
+	int i;
+	int max=0;
+	int allmax;
+	int numdofs=0;
+
+	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
+	for(i=0;i<this->Size();i++){
+
+		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+
+		/*Check that this node corresponds to our analysis currently being carried out: */
+		if (node->InAnalysis(analysis_type)){
+
+			numdofs=node->GetNumberOfDofs(NoneApproximationEnum,setenum);
+			if(numdofs>max)max=numdofs;
+		}
+	}
+
+	/*Grab max of all cpus: */
+	#ifdef _HAVE_MPI_
+	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
+	max=allmax;
+	#endif
+
+	return max;
+}
+/*}}}*/
+/*FUNCTION Nodes::NumberOfDofs{{{*/
+int   Nodes::NumberOfDofs(int analysis_type,int setenum){
+
+	int   allnumdofs;
+
+	/*Get number of dofs on current cpu (excluding clones)*/
+	int numdofs=this->NumberOfDofsLocal(analysis_type,setenum);
+
+	/*Gather from all cpus: */
+	#ifdef _HAVE_MPI_
+	MPI_Allreduce ( (void*)&numdofs,(void*)&allnumdofs,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+	#else
+	allnumdofs=numdofs;
+	#endif
+	return allnumdofs;
+}
+/*}}}*/
+/*FUNCTION Nodes::NumberOfDofsLocal{{{*/
+int   Nodes::NumberOfDofsLocal(int analysis_type,int setenum){
+
+	int   numdofs=0;
+
+	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
+	for(int i=0;i<this->Size();i++){
+
+		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+
+		/*Check that this node corresponds to our analysis currently being carried out: */
+		if (node->InAnalysis(analysis_type)){
+
+			/*Ok, this object is a node, ask it to plug values into partition: */
+			if (!node->IsClone()){
+				numdofs+=node->GetNumberOfDofs(NoneApproximationEnum,setenum);
+			}
+		}
+	}
+
+	return numdofs;
+}
+/*}}}*/
+/*FUNCTION Nodes::NumberOfNodes(){{{*/
+int Nodes::NumberOfNodes(void){
+
+	/*Careful! only use once all clones have been setup for all nodes!: */
+
+	int numnodes=0;
+	int allnumnodes=0;
+
+	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
+	for(int i=0;i<this->Size();i++){
+		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+
+		/*Ok, this object is a node, ask it to plug values into partition: */
+		if (!node->IsClone()) numnodes++;
+	}
+
+	/*Gather from all cpus: */
+	#ifdef _HAVE_MPI_
+	MPI_Allreduce ( (void*)&numnodes,(void*)&allnumnodes,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+	#else
+	allnumnodes=numnodes;
+	#endif
+
+	return allnumnodes;
+}
+/*}}}*/
+/*FUNCTION Nodes::NumberOfNodes(analysis){{{*/
+int Nodes::NumberOfNodes(int analysis_type){
+
+	int i;
+
+	int max_sid=-1;
+	int sid;
+	int node_max_sid;
+
+	for(i=0;i<this->Size();i++){
+
+		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+
+		/*Check that this node corresponds to our analysis currently being carried out: */
+		if (node->InAnalysis(analysis_type)){
+
+			sid=node->Sid();
+			if (sid>max_sid)max_sid=sid;
+		}
+	}
+
+	#ifdef _HAVE_MPI_
+	MPI_Reduce (&max_sid,&node_max_sid,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
+	MPI_Bcast(&node_max_sid,1,MPI_INT,0,IssmComm::GetComm());
+	max_sid=node_max_sid;
+	#endif
+
+	/*sid starts at 0*/
+	max_sid++;
+
+	/*return*/
+	return max_sid;
+}
+/*}}}*/
+/*FUNCTION Nodes::Ranks{{{*/
+void   Nodes::Ranks(int* ranks,int analysis_type){
+
+	int my_rank;
+	int sid;
+
+	/*recover my_rank:*/
+	my_rank=IssmComm::GetRank();
+
+	/*Go through nodes, and for each object, report it cpu: */
+	for(int i=0;i<this->Size();i++){
+
+		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+
+		/*Check that this node corresponds to our analysis currently being carried out: */
+		if (node->InAnalysis(analysis_type)){
+			/*Plug rank into ranks, according to sid: */
+			sid=node->Sid();
+			ranks[sid]=my_rank; 
+		}
+	}
+}
+/*}}}*/
+/*FUNCTION Nodes::SetCurrentConfiguration{{{*/
+void Nodes::SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+
+	vector<Object*>::iterator object;
+	Node* node=NULL;
+
+	for (object=objects.begin() ; object < objects.end(); object++ ){
+
+		node=dynamic_cast<Node*>(*object);
+		node->SetCurrentConfiguration(nodes,vertices);
+
+	}
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Nodes.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Nodes.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Nodes.h	(revision 14996)
@@ -0,0 +1,41 @@
+#ifndef _CONTAINER_NODES_H_
+#define  _CONTAINER_NODES_H_
+
+#include "./DataSet.h"
+class Parameters;
+class Elements;
+class Vertices;
+class Loads;
+class Nodes;
+class Materials;
+
+
+/*!\brief Declaration of Nodes class.
+ *
+ * Declaration of Nodes class.  Nodes are vector lists of objects (Containers) of Node objects.
+ * Node objects are the degrees of freedom (DOFs) for a particular analysis type (not to be 
+ * confused with a vertex, which defines the (x,y,z) location of a point).
+ */ 
+class Nodes: public DataSet{
+
+	public:
+
+		/*constructors, destructors*/
+		Nodes();
+		~Nodes();
+
+		/*numerics*/
+		void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+		void  DistributeDofs(int analysis_type,int SETENUM);
+		void  FlagClones(int analysis_type);
+		int   MaxNumDofs(int analysis_type,int setenum);
+		int   NumberOfDofs(int analysis_type,int setenum);
+		int   NumberOfDofsLocal(int analysis_type,int setenum);
+		int   NumberOfNodes(int analysis_type);
+		int   NumberOfNodes(void);
+		void  Ranks(int* ranks,int analysis_type);
+		void  SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+
+};
+
+#endif //ifndef _NODES_H_
Index: issm/trunk-jpl/src/c/classes/objects/Options/OptionUtilities.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Options/OptionUtilities.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Options/OptionUtilities.cpp	(revision 14996)
@@ -15,5 +15,4 @@
 #include "../objects.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Options/Options.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Options/Options.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Options/Options.cpp	(revision 14996)
@@ -0,0 +1,111 @@
+/*
+ * \file Options.cpp
+ * \brief: Implementation of Options class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include <vector>
+#include <algorithm>
+#include <cstring>
+
+#include "../DataSet.h"
+#include "./Options.h"
+#include "../../../shared/shared.h"
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Options::Options(){{{*/
+Options::Options(){
+	return;
+}
+/*}}}*/
+/*FUNCTION Options::~Options(){{{*/
+Options::~Options(){
+	return;
+}
+/*}}}*/
+
+/*Object management*/
+/*FUNCTION Options::AddOption{{{*/
+int  Options::AddOption(Option* in_option){
+
+	char* name=NULL;
+
+	vector<Object*>::iterator object;
+	Option* option=NULL;
+
+	/*In debugging mode, check that the option is not a NULL pointer*/
+	_assert_(in_option);
+
+	/*Also, check the option name*/
+	name=in_option->Name();
+
+	if(!name) _error_("input option has an empty name");
+	if(strchr(name,'.')) _error_("Option \"" << name << "\" has a protected character \".\"");
+	if(strchr(name,'[')) _error_("Option \"" << name << "\" has a protected character \"[\"");
+	if(strchr(name,']')) _error_("Option \"" << name << "\" has a protected character \"]\"");
+
+	/*Finally, check that no option of the same name already exists in the dataset*/
+	for(object=objects.begin();object<objects.end();object++){
+
+		option=dynamic_cast<Option*>(*object);
+		if (!strcmp(option->Name(),name)){
+			_error_("Options \"" << name << "\" found multiple times");
+			break;
+		}
+	}
+
+	/*OK, all checks went well, add option to dataset*/
+	this->AddObject(in_option);
+
+	return 1;
+}
+/*}}}*/
+/*FUNCTION Options::GetOption{{{*/
+Option* Options::GetOption(const char* name){
+
+	vector<Object*>::iterator object;
+	Option* option=NULL;
+
+	/*Go through options and find option: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		option=dynamic_cast<Option*>(*object);
+		if (!strncmp(name,option->Name(),strlen(option->Name()))){
+
+			/*OK, now do we have a complete name? If not, it is a cell or a structure, we need to go further*/
+			if(!strcmp(name,option->Name())){
+				return option;
+			}
+			else{
+				/*If the object is a Cell, recursive call to its options*/ 
+				if(option->ObjectEnum()==OptionCellEnum){
+					GenericOption<Options*>* celloption=(GenericOption<Options*>*)option;
+					return celloption->value->GetOption(name);
+				}
+				/*If the object is a Struct loop over its size and recursive call*/
+				else if(option->ObjectEnum()==OptionStructEnum){
+					for(int i=0;i<option->NumEl();i++){
+						GenericOption<Options**>* structoption=(GenericOption<Options**>*)option;
+						_assert_(structoption->value[i]);
+						return structoption->value[i]->GetOption(name);
+					}
+				}
+				/*Else: not supported*/
+				else{
+					_error_("Cannot recover field \"" << name << "\" for an option of type " << EnumToStringx(option->ObjectEnum()));
+				}
+			}
+		}
+	}
+
+	/*Option not found return NULL pointer*/
+	return NULL;
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Options/Options.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Options/Options.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Options/Options.h	(revision 14996)
@@ -0,0 +1,108 @@
+#ifndef _CONTAINER_OPTIONS_H_
+#define _CONTAINER_OPTIONS_H_
+
+/*forward declarations */
+class Option;
+#include "../DataSet.h"
+#include "./GenericOption.h"
+
+/*!\brief Declaration of Options class. 
+ * 
+ * Declaration of Options class.  Options are vector lists (Containers) of Option objects.
+ */ 
+class Options: public DataSet{
+
+	public:
+
+		/*constructors, destructors*/
+		Options();
+		~Options();
+
+		/*numerics*/
+		int  AddOption(Option* in_oobject);
+		Option* GetOption(const char* name);
+
+		template <class OptionType> void Get(OptionType* pvalue,const char* name){ /*{{{*/
+
+			/*Get option*/
+			GenericOption<OptionType>* genericoption=dynamic_cast<GenericOption<OptionType>*>(GetOption(name));
+
+			/*If the pointer is not NULL, the option has been found*/
+			if(genericoption){
+				genericoption->Get(pvalue);
+			}
+			/*Else, the Option does not exist, no default provided*/
+			else{
+				_error_("option of name \"" << name << "\" not found, and no default value has been provided");
+			}
+		}
+		/*}}}*/
+		template <class OptionType> void Get(OptionType* pvalue,int* pnumel, const char* name){ /*{{{*/
+
+			/*Get option*/
+			GenericOption<OptionType>* genericoption=dynamic_cast<GenericOption<OptionType>*>(GetOption(name));
+
+			/*If the pointer is not NULL, the option has been found*/
+			if(genericoption){
+				genericoption->Get(pvalue);
+				*pnumel=genericoption->NumEl();
+			}
+			/*Else, the Option does not exist, no default provided*/
+			else{
+				_error_("option of name \"" << name << "\" not found, and no default value has been provided");
+			}
+		}
+		/*}}}*/
+		template <class OptionType> void Get(OptionType* pvalue,const char* name,OptionType default_value){ /*{{{*/
+
+			/*Get option*/
+			GenericOption<OptionType>* genericoption=dynamic_cast<GenericOption<OptionType>*>(GetOption(name));
+
+			/*If the pointer is not NULL, the option has been found*/
+			if(genericoption){
+				genericoption->Get(pvalue);
+			}
+			else{
+				if(GetOption(name)) _printLine_("WARNING: option "<<name<<" found but fetched format not consistent, defaulting...");
+				*pvalue=default_value;
+			}
+		}
+		/*}}}*/
+		template <class OptionType> void Get(OptionType* pvalue,int* pnumel, const char* name,OptionType default_value){ /*{{{*/
+
+			/*Get option*/
+			GenericOption<OptionType>* genericoption=dynamic_cast<GenericOption<OptionType>*>(GetOption(name));
+
+			/*If the pointer is not NULL, the option has been found*/
+			if(genericoption){
+				genericoption->Get(pvalue);
+				*pnumel=genericoption->NumEl();
+			}
+			else{
+				*pvalue=default_value;
+			}
+		}
+		/*}}}*/
+
+};
+
+#endif //ifndef _INPUTS_H_
+
+template <> inline void Options::Get(char** pvalue,const char* name,char* default_value){ /*{{{*/
+
+	/*Get option*/
+	GenericOption<char*>* genericoption=dynamic_cast<GenericOption<char*>*>(GetOption(name));
+
+	/*If the pointer is not NULL, the option has been found*/
+	if(genericoption){
+		genericoption->Get(pvalue);
+	}
+	else{
+		/*Make a copy*/
+		int   stringsize=strlen(default_value)+1;
+		char* outstring=xNew<char>(stringsize);
+		xMemCpy<char>(outstring,default_value,stringsize);
+		*pvalue=outstring;
+	}
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 
 /*DoubleParam constructors and destructor*/
Index: issm/trunk-jpl/src/c/classes/objects/Params/DoubleTransientMatParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/DoubleTransientMatParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/DoubleTransientMatParam.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/FileParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/FileParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/FileParam.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp	(revision 14996)
@@ -16,5 +16,4 @@
 #include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/IntParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/IntParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/IntParam.cpp	(revision 14996)
@@ -14,7 +14,5 @@
 #include <string.h>
 #include "../objects.h"
-#include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp	(revision 14996)
@@ -14,7 +14,5 @@
 #include <string.h>
 #include "../objects.h"
-#include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp	(revision 14996)
@@ -14,7 +14,5 @@
 #include <string.h>
 #include "../objects.h"
-#include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/Parameters.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/Parameters.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Params/Parameters.cpp	(revision 14996)
@@ -0,0 +1,605 @@
+/*
+ * \file Parameters.cpp
+ * \brief: Implementation of the Parameters class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include <vector>
+#include <functional>
+#include <algorithm>
+#include <iostream>
+
+#include "./Parameters.h"
+#include "./Param.h"
+
+#include "./BoolParam.h"
+#include "./DoubleMatParam.h"
+#include "./DoubleParam.h"
+#include "./DoubleVecParam.h"
+#include "./IntParam.h"
+#include "./IntVecParam.h"
+#include "./IntMatParam.h"
+#include "./FileParam.h"
+#include "./MatrixParam.h"
+#include "./VectorParam.h"
+#include "./StringArrayParam.h"
+#include "./StringParam.h"
+
+#include "../../../shared/shared.h"
+#include "../../../toolkits/toolkits.h"
+
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Parameters::Parameters(){{{*/
+Parameters::Parameters(){
+	enum_type=ParametersEnum;
+	return;
+}
+/*}}}*/
+/*FUNCTION Parameters::~Parameters(){{{*/
+Parameters::~Parameters(){
+	return;
+}
+/*}}}*/
+
+/*Object management*/
+/*FUNCTION Parameters::Exist{{{*/
+bool Parameters::Exist(int enum_type){
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type) return true;
+	}
+	return false;
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(bool* pbool,int enum_type){{{*/
+void Parameters::FindParam(bool* pbool,int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pbool);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(int* pinteger,int enum_type){{{*/
+void Parameters::FindParam(int* pinteger,int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pinteger);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(IssmDouble* pscalar, int enum_type){{{*/
+void Parameters::FindParam(IssmDouble* pscalar, int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pscalar);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(IssmDouble* pscalar, int enum_type,IssmDouble time){{{*/
+void Parameters::FindParam(IssmDouble* pscalar, int enum_type,IssmDouble time){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pscalar,time);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(char** pstring,int enum_type){{{*/
+void Parameters::FindParam(char** pstring,int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pstring);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(char*** pstringarray,int* pM,int enum_type){{{*/
+void Parameters::FindParam(char*** pstringarray,int* pM,int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pstringarray,pM);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(int** pintarray,int* pM,int enum_type){{{*/
+void Parameters::FindParam(int** pintarray,int* pM, int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pintarray,pM);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(int** pintarray,int* pM,int* pN,int enum_type){{{*/
+void Parameters::FindParam(int** pintarray,int* pM,int *pN,int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pintarray,pM,pN);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(IssmDouble** pIssmDoublearray,int* pM,int enum_type){{{*/
+void Parameters::FindParam(IssmDouble** pIssmDoublearray,int* pM, int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pIssmDoublearray,pM);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(IssmDouble** pIssmDoublearray,int* pM, int* pN,int enum_type){{{*/
+void Parameters::FindParam(IssmDouble** pIssmDoublearray,int* pM, int* pN,int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pIssmDoublearray,pM,pN);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(IssmDouble*** parray,int* pM,int** pmdims_array,int** pndims_array,int enum_type){{{*/
+void Parameters::FindParam(IssmDouble*** parray,int* pM,int** pmdims_array,int** pndims_array,int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(parray,pM,pmdims_array,pndims_array);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(Vector<IssmDouble>** pvec,int enum_type){{{*/
+void Parameters::FindParam(Vector<IssmDouble>** pvec,int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pvec);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(Matrix<IssmDouble>** pmat,int enum_type){{{*/
+void Parameters::FindParam(Matrix<IssmDouble>** pmat,int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pmat);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(FILE** pfid,int enum_type){{{*/
+void Parameters::FindParam(FILE** pfid,int enum_type){ _assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pfid);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(DataSet** pdataset,int enum_type){{{*/
+void Parameters::FindParam(DataSet** pdataset,int enum_type){ 
+	_assert_(this);
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			param->GetParameterValue(pdataset);
+			return;
+		}
+	}
+	_error_("could not find parameter " << EnumToStringx(enum_type));
+}
+/*}}}*/
+
+/*FUNCTION Parameters::SetParam(bool boolean,int enum_type);{{{*/
+void   Parameters::SetParam(bool boolean,int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(boolean); //already exists, just set it.
+	else this->AddObject(new BoolParam(enum_type,boolean)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(int integer,int enum_type);{{{*/
+void   Parameters::SetParam(int integer,int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(integer); //already exists, just set it.
+	else this->AddObject(new IntParam(enum_type,integer)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(IssmDouble scalar,int enum_type);{{{*/
+void   Parameters::SetParam(IssmDouble scalar,int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(scalar); //already exists, just set it.
+	else this->AddObject(new DoubleParam(enum_type,scalar)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(char* string,int enum_type);{{{*/
+void   Parameters::SetParam(char* string,int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(string); //already exists, just set it.
+	else this->AddObject(new StringParam(enum_type,string)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(char** stringarray,int M, int enum_type);{{{*/
+void   Parameters::SetParam(char** stringarray,int M, int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(stringarray,M); //already exists, just set it.
+	else this->AddObject(new StringArrayParam(enum_type,stringarray,M)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(IssmDouble* IssmDoublearray,int M,int enum_type);{{{*/
+void   Parameters::SetParam(IssmDouble* IssmDoublearray,int M, int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(IssmDoublearray,M); //already exists, just set it.
+	else this->AddObject(new DoubleVecParam(enum_type,IssmDoublearray,M)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(IssmDouble* IssmDoublearray,int M,int N, int enum_type);{{{*/
+void   Parameters::SetParam(IssmDouble* IssmDoublearray,int M, int N, int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(IssmDoublearray,M,N); //already exists, just set it.
+	else this->AddObject(new DoubleMatParam(enum_type,IssmDoublearray,M,N)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(int* intarray,int M,int enum_type);{{{*/
+void   Parameters::SetParam(int* intarray,int M, int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(intarray,M); //already exists, just set it.
+	else this->AddObject(new IntVecParam(enum_type,intarray,M)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(int* intarray,int M,int N, int enum_type);{{{*/
+void   Parameters::SetParam(int* intarray,int M, int N, int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(intarray,M,N); //already exists, just set it.
+	else this->AddObject(new IntMatParam(enum_type,intarray,M,N)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(Vector<IssmDouble>* vector,int enum_type);{{{*/
+void   Parameters::SetParam(Vector<IssmDouble>* vector,int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(vector); //already exists, just set it.
+	else this->AddObject(new VectorParam(enum_type,vector)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(Matrix<IssmDouble>* matrix,int enum_type);{{{*/
+void   Parameters::SetParam(Matrix<IssmDouble>* matrix,int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(matrix); //already exists, just set it.
+	else this->AddObject(new MatrixParam(enum_type,matrix)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::SetParam(FILE* fid,int enum_type);{{{*/
+void   Parameters::SetParam(FILE* fid,int enum_type){
+
+	Param* param=NULL;
+
+	/*first, figure out if the param has already been created: */
+	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+
+	if(param) param->SetValue(fid); //already exists, just set it.
+	else this->AddObject(new FileParam(enum_type,fid)); //just add the new parameter.
+}
+/*}}}*/
+/*FUNCTION Parameters::UnitConversion(int direction_enum);{{{*/
+void   Parameters::UnitConversion(int direction_enum){
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		param=dynamic_cast<Param*>(*object);
+		param->UnitConversion(direction_enum);
+	}
+
+}
+/*}}}*/
+
+/*FUNCTION Parameters::FindParamObject{{{*/
+Object* Parameters::FindParamObject(int enum_type){
+
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		param=dynamic_cast<Param*>(*object);
+		if(param->InstanceEnum()==enum_type){
+			return (*object);
+		}
+	}
+	return NULL;
+}
+/*}}}*/
+
+/*Methods relating to parameters: */
+char* OptionsFromAnalysis(Parameters* parameters,int analysis_type){ /*{{{*/
+
+	/* figure out ISSM options for current analysis, return a string. */ 
+
+	/*output: */
+	char*   outstring=NULL;
+
+	/*intermediary: */
+	int          dummy;
+	IssmDouble  *analyses    = NULL;
+	char       **strings     = NULL;
+	char        *string      = NULL;
+	int          numanalyses;
+	int          found       = -1;
+	int          i;
+
+	numanalyses=0;
+	parameters->FindParam(&strings,&numanalyses,ToolkitsOptionsStringsEnum);
+
+	parameters->FindParam(&analyses,&dummy,ToolkitsOptionsAnalysesEnum);
+
+	if(numanalyses==0)return NULL; //we did not find petsc options, don't bother.
+
+	/*ok, go through analyses and figure out if it corresponds to our analysis_type: */
+	for(i=0;i<numanalyses;i++){
+		if(analyses[i]==analysis_type){
+			found=i;
+			break;
+		}
+	}
+	if(found==-1){
+		/*still haven't found a list of petsc options, go find the default one, for analysis type NoneAnalysisEnum: */
+		for(i=0;i<numanalyses;i++){
+			if(analyses[i]==DefaultAnalysisEnum){
+				found=i;
+				break;
+			}
+		}
+	}
+	if (found==-1){
+		_error_("could find neither a default analysis nor analysis " << EnumToStringx(analysis_type));
+	}
+
+	/*ok, grab the option string: */
+	outstring=xNew<char>(strlen(strings[found])+1);
+	strcpy(outstring,strings[found]);
+
+	/*Free ressources*/
+	xDelete<IssmDouble>(analyses);
+	for(i=0;i<numanalyses;i++){
+		string=strings[i];
+		xDelete<char>(string);
+	}
+	xDelete<char*>(strings);
+	return outstring;
+} 
+/*}}}*/
+void ToolkitsOptionsFromAnalysis(Parameters* parameters,int analysis_type){ /*{{{*/
+
+	/*!\file:  ToolkitsOptionsFromAnalysis.cpp
+	 * \brief: for each analysis, setup the issmoptions string. 
+	 * This is mainly for the case where we run our toolkits using petsc. In this case, we need to 
+	 * plug our toolkits options directly into the petsc options database. This is the case for each analysis type 
+	 * and parameters
+	 */ 
+
+
+	char* options=NULL;
+
+	/*Recover first the options string for this analysis: */
+	options=OptionsFromAnalysis(parameters,analysis_type);
+
+	/*Initialize our Toolkit Options: */
+	ToolkitOptions::Init(options);
+
+	#ifdef _HAVE_PETSC_
+		/*In case we are using PETSC, we do not rely on issmoptions. Instead, we dump issmoptions into the Petsc 
+		 * options database: */
+
+		#if _PETSC_MAJOR_ == 2 
+		PetscOptionsDestroy();
+		PetscOptionsCreate();
+		//PetscOptionsCheckInitial_Private();
+		//PetscOptionsCheckInitial_Components();
+		PetscOptionsSetFromOptions();
+		PetscOptionsInsertMultipleString(options); //our patch
+		#else
+		PetscOptionsSetFromOptions();
+		PetscOptionsClear();
+		//PetscOptionsSetFromOptions();
+		PetscOptionsInsertMultipleString(options); //our patch
+		#endif
+
+	#endif
+
+	xDelete<char>(options);
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Params/Parameters.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/Parameters.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Params/Parameters.h	(revision 14996)
@@ -0,0 +1,65 @@
+#ifndef _CONTAINER_PARAMETERS_H_
+#define  _CONTAINER_PARAMETERS_H_
+#include <stdio.h>
+
+/*forward declarations */
+template <class doublematrix> class Matrix;
+template <class doubletype> class Vector;
+#include "../DataSet.h"
+#include "../../../shared/shared.h"
+
+/*!\brief Declaration of Parameters class.  
+ *
+ * Declaration of Parameters class.  Parameters are vector lists (Containers) of Parameter objects.
+ */ 
+class Parameters: public DataSet{
+
+	public:
+
+		/*constructors, destructors*/ 
+		Parameters();
+		~Parameters();
+
+		/*numerics*/
+		bool  Exist(int enum_type);
+
+		void  FindParam(bool* pinteger,int enum_type);
+		void  FindParam(int* pinteger,int enum_type);
+		void  FindParam(IssmDouble* pscalar, int enum_type);
+		void  FindParam(IssmDouble* pscalar, int enum_type,IssmDouble time);
+		void  FindParam(char** pstring,int enum_type);
+		void  FindParam(char*** pstringarray,int* pM,int enum_type);
+		void  FindParam(int** pintarray,int* pM,int enum_type);
+		void  FindParam(int** pintarray,int* pM,int* PN,int enum_type);
+		void  FindParam(IssmDouble** pIssmDoublearray,int* pM,int enum_type);
+		void  FindParam(IssmDouble** pIssmDoublearray,int* pM,int* pN,int enum_type);
+		void  FindParam(IssmDouble*** parray,int* pM, int** pmdims_array,int** pndims_array,int enum_type);
+		void  FindParam(Vector<IssmDouble>** pvec,int enum_type);
+		void  FindParam(Matrix<IssmDouble>** pmat,int enum_type);
+		void  FindParam(FILE** pfid,int enum_type);
+		void  FindParam(DataSet** pdataset, int enum_type);
+
+		void  SetParam(bool boolean,int enum_type);
+		void  SetParam(int integer,int enum_type);
+		void  SetParam(IssmDouble scalar, int enum_type);
+		void  SetParam(char* string,int enum_type);
+		void  SetParam(char** stringarray,int M,int enum_type);
+		void  SetParam(IssmDouble* IssmDoublearray,int M,int enum_type);
+		void  SetParam(IssmDouble* IssmDoublearray,int M,int N,int enum_type);
+		void  SetParam(int* intarray,int M,int enum_type);
+		void  SetParam(int* intarray,int M,int N,int enum_type);
+		void  SetParam(Vector<IssmDouble>* vec,int enum_type);
+		void  SetParam(Matrix<IssmDouble>* mat,int enum_type);
+		void  SetParam(FILE* fid,int enum_type);
+		void  UnitConversion(int direction_enum);
+
+		Object* FindParamObject(int enum_type);
+
+};
+
+/*Methods relating to parameters: */
+char       *OptionsFromAnalysis(Parameters *parameters,int analysis_type);
+void        ToolkitsOptionsFromAnalysis(Parameters* parameters,int analysis_type);
+
+
+#endif //ifndef _PARAMETERS_H_
Index: issm/trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp	(revision 14996)
@@ -14,7 +14,5 @@
 #include <string.h>
 #include "../objects.h"
-#include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/StringParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/StringParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/StringParam.cpp	(revision 14996)
@@ -14,7 +14,5 @@
 #include <string.h>
 #include "../objects.h"
-#include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp	(revision 14996)
@@ -14,7 +14,5 @@
 #include <string.h>
 #include "../objects.h"
-#include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp	(revision 14996)
@@ -14,7 +14,5 @@
 #include <string.h>
 #include "../objects.h"
-#include "../../../shared/Enum/Enum.h"
 #include "../../../shared/shared.h"
-#include "../../../Container/Container.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Profiler.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 14996)
@@ -11,6 +11,6 @@
 
 #include "./Profiler.h"
+#include "./Params/Parameters.h"
 #include "./Params/DoubleParam.h"
-#include "../../Container/Parameters.h"
 #include "../../toolkits/toolkits.h"
 /*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Vertex.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 #include "../classes.h"
 #include "../../shared/shared.h"
-#include "../../Container/Parameters.h"
 /*}}}*/
 
Index: issm/trunk-jpl/src/c/classes/objects/Vertices.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Vertices.cpp	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Vertices.cpp	(revision 14996)
@@ -0,0 +1,242 @@
+/*
+ * \file Vertices.cpp
+ * \brief: Implementation of Vertices class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include <vector>
+#include <functional>
+#include <algorithm>
+#include <iostream>
+
+#include "./Vertices.h"
+#include "../../shared/shared.h"
+#include "./Vertex.h"
+
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Vertices::Vertices(){{{*/
+Vertices::Vertices(){
+	enum_type=VerticesEnum;
+	return;
+}
+/*}}}*/
+/*FUNCTION Vertices::~Vertices(){{{*/
+Vertices::~Vertices(){
+	return;
+}
+/*}}}*/
+
+/*Numerics management*/
+/*FUNCTION Vertices::DistributePids{{{*/
+void  Vertices::DistributePids(int numberofobjects){
+
+	int num_procs;
+	int my_rank;
+
+	int  i;
+	int  pidcount    = 0;
+	int *allpidcount = NULL;
+	int *truepids    = NULL;
+	int *alltruepids = NULL;
+
+	/*recover my_rank:*/
+	my_rank=IssmComm::GetRank();
+	num_procs=IssmComm::GetSize();
+
+	/*Go through objects, and distribute pids locally, from 0 to numberofpidsperobject*/
+	for (i=0;i<this->Size();i++){
+		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+		vertex->DistributePids(&pidcount);
+	}
+
+	/* Now every object has distributed pids, but locally, and with a pid count starting from 
+	 * 0. This means the pids between all the cpus are not unique. We now offset the pids of each
+	 * cpus by the total last pids of the previus cpu, starting from 0.
+	 * First: get number of pids for each cpu*/
+	allpidcount=xNew<int>(num_procs);
+	#ifdef _HAVE_MPI_
+	MPI_Gather(&pidcount,1,MPI_INT,allpidcount,1,MPI_INT,0,IssmComm::GetComm());
+	MPI_Bcast(allpidcount,num_procs,MPI_INT,0,IssmComm::GetComm());
+	#else
+	allpidcount[0]=pidcount;
+	#endif
+
+	/* Every cpu should start its own pid count at the end of the pidcount from cpu-1*/
+	pidcount=0;
+	if(my_rank!=0){
+		for(i=0;i<my_rank;i++){
+			pidcount+=allpidcount[i];
+		}
+	}
+	for (i=0;i<this->Size();i++){
+		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+		vertex->OffsetPids(pidcount);
+	}
+
+	/* Finally, remember that cpus may have skipped some objects, because they were clones. For every 
+	 * object that is not a clone, tell them to show their pids, so that later on, they can get picked 
+	 * up by their clones: */
+	truepids   =xNewZeroInit<int>(numberofobjects);
+	alltruepids=xNewZeroInit<int>(numberofobjects);
+	for (i=0;i<this->Size();i++){
+		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+		vertex->ShowTruePids(truepids);
+	}
+	#ifdef _HAVE_MPI_
+	MPI_Allreduce((void*)truepids,(void*)alltruepids,numberofobjects,MPI_INT,MPI_MAX,IssmComm::GetComm());
+	#else
+	for(i=0;i<numberofobjects;i++)alltruepids[i]=truepids[i];
+	#endif
+
+	/* Now every cpu knows the true pids of everyone else that is not a clone*/
+	for(i=0;i<this->Size();i++){
+		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+		vertex->UpdateClonePids(alltruepids);
+	}
+
+	/* Free ressources: */
+	xDelete<int>(allpidcount);
+	xDelete<int>(truepids);
+	xDelete<int>(alltruepids);
+}
+/*}}}*/
+/*FUNCTION Vertices::FlagClones{{{*/
+void  Vertices::FlagClones(int numberofobjects){
+
+	int i;
+	int num_procs;
+
+	int* ranks=NULL;
+	int* minranks=NULL;
+
+	/*recover num_procs:*/
+	num_procs=IssmComm::GetSize();
+
+	/*Allocate ranks: */
+	ranks=xNew<int>(numberofobjects);
+	minranks=xNew<int>(numberofobjects);
+
+	for(i=0;i<numberofobjects;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
+
+	/*Now go through all our objects and ask them to report to who they belong (which rank): */
+	Ranks(ranks);
+
+	/*We need to take the minimum rank for each vertex, and every cpu needs to get that result. That way, 
+	 * when we start building the dof list for all vertexs, a cpu can check whether its vertex already has been 
+	 * dealt with by another cpu. We take the minimum because we are going to manage dof assignment in increasing 
+	 * order of cpu rank. This is also why we initialized this array to num_procs.*/
+	#ifdef _HAVE_MPI_
+	MPI_Allreduce ( (void*)ranks,(void*)minranks,numberofobjects,MPI_INT,MPI_MIN,IssmComm::GetComm());
+	#else
+	for(i=0;i<numberofobjects;i++)minranks[i]=ranks[i];
+	#endif
+
+	/*Now go through all objects, and use minranks to flag which objects are cloned: */
+	for(i=0;i<this->Size();i++){
+		/*For this object, decide whether it is a clone: */
+		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+		vertex->SetClone(minranks);
+	}
+
+	/*Free ressources: */
+	xDelete<int>(ranks); 
+	xDelete<int>(minranks);
+
+}
+/*}}}*/
+/*FUNCTION Vertices::NumberOfVertices{{{*/
+int Vertices::NumberOfVertices(void){
+
+	int i,sid;
+	int max_sid=0;
+	int vertex_max_sid;
+
+	for(i=0;i<this->Size();i++){
+		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+		sid=vertex->Sid();
+		if (sid>max_sid)max_sid=sid;
+	}
+
+	#ifdef _HAVE_MPI_
+	MPI_Reduce (&max_sid,&vertex_max_sid,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
+	MPI_Bcast(&vertex_max_sid,1,MPI_INT,0,IssmComm::GetComm());
+	max_sid=vertex_max_sid;
+	#endif
+
+	/*sid starts at 0*/
+	max_sid++;
+
+	/*return:*/
+	return max_sid;
+}
+/*}}}*/
+/*FUNCTION Vertices::Ranks{{{*/
+void   Vertices::Ranks(int* ranks){
+
+	int my_rank;
+	int        sid;
+
+	/*recover my_rank:*/
+	my_rank=IssmComm::GetRank();
+
+	/*Go through a dataset, and for each object, report it cpu: */
+	for(int i=0;i<this->Size();i++){
+		/*Plug rank into ranks, according to id: */
+		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+		sid=vertex->Sid();
+		ranks[sid]=my_rank; 
+	}
+}
+/*}}}*/
+/*FUNCTION Vertices::ToXYZ{{{*/
+IssmDouble* Vertices::ToXYZ(void){
+
+	/*intermediary: */
+	int i;
+	int my_rank;
+	int num_vertices;
+
+	/*output: */
+	Matrix<IssmDouble>* xyz = NULL;
+	IssmDouble* xyz_serial=NULL;
+
+	/*recover my_rank:*/
+	my_rank=IssmComm::GetRank();
+
+	/*First, figure out number of vertices: */
+	num_vertices=this->NumberOfVertices();
+
+	/*Now, allocate matrix to hold all the vertices x,y and z values: */
+	xyz= new Matrix<IssmDouble>(num_vertices,3);
+
+	/*Go through vertices, and for each vertex, object, report it cpu: */
+	for(i=0;i<this->Size();i++){
+
+		/*let vertex fill matrix: */
+		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+		vertex->ToXYZ(xyz);
+	}
+
+	/*Assemble:*/
+	xyz->Assemble();
+
+	/*gather on cpu 0: */
+	xyz_serial=xyz->ToSerial();
+
+	/*free ressources: */
+	delete xyz;
+	if(my_rank!=0)delete xyz_serial;
+
+	/*return matrix: */
+	return xyz_serial;
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/objects/Vertices.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/Vertices.h	(revision 14996)
+++ issm/trunk-jpl/src/c/classes/objects/Vertices.h	(revision 14996)
@@ -0,0 +1,30 @@
+#ifndef _CONTAINER_VERTICES_H_
+#define  _CONTAINER_VERTICES_H_
+
+/*forward declarations */
+#include "./DataSet.h"
+#include "../../shared/shared.h"
+
+/*!\brief Declaration of Vertices class.
+ *
+ * Declaration of Vertices class.  Vertices are vector lists (Containers) of Vertex objects.
+ * A vertex is a set of (x,y,z) coordinates defining the location of points in the mesh (not
+ * to be confused with a node, which is a degree of freedom (DOF) for a particular analysis).
+ */ 
+class Vertices: public DataSet{
+
+	public:
+
+		/*constructors, destructors:*/ 
+		Vertices();
+		~Vertices();
+
+		/*numerics:*/
+		void  DistributePids(int numberofnodes);
+		void  FlagClones(int numberofnodes);
+		int   NumberOfVertices(void);
+		void  Ranks(int* ranks);
+		IssmDouble* ToXYZ(void);
+};
+
+#endif //ifndef _VERTICES_H_
Index: issm/trunk-jpl/src/c/classes/objects/objects.h
===================================================================
--- issm/trunk-jpl/src/c/classes/objects/objects.h	(revision 14995)
+++ issm/trunk-jpl/src/c/classes/objects/objects.h	(revision 14996)
@@ -8,8 +8,11 @@
 /*Abstract classes: */
 #include "./Object.h"
+#include "./DataSet.h"
 
 /*Objects: */
 #include "./Contour.h"
+#include "./Vertices.h"
 #include "./Vertex.h"
+#include "./Nodes.h"
 #include "./Node.h"
 #include "./Profiler.h"
@@ -20,4 +23,5 @@
 
 /*Constraints: */
+#include "./Constraints/Constraints.h"
 #include "./Constraints/Constraint.h"
 #include "./Constraints/SpcStatic.h"
@@ -26,4 +30,5 @@
 
 /*Loads: */
+#include "./Loads/Loads.h"
 #include "./Loads/Load.h"
 #include "./Loads/Friction.h"
@@ -35,4 +40,5 @@
 
 /*Elements: */
+#include "./Elements/Elements.h"
 #include "./Elements/Element.h"
 #include "./Elements/Penta.h"
@@ -74,8 +80,10 @@
 /*Option parsing objects: */
 #include "./Options/Option.h"
+#include "./Options/Options.h"
 #include "./Options/GenericOption.h"
 #include "./Options/OptionUtilities.h"
 
 /*Inputs: */
+#include "./Inputs/Inputs.h"
 #include "./Inputs/Input.h"
 #include "./Inputs/BoolInput.h"
@@ -96,8 +104,10 @@
 
 /*ExternalResults: */
+#include "./ExternalResults/Results.h"
 #include "./ExternalResults/ExternalResult.h"
 #include "./ExternalResults/GenericExternalResult.h"
 
 /*Materials: */
+#include "./Materials/Materials.h"
 #include "./Materials/Material.h"
 #include "./Materials/Matice.h"
@@ -117,4 +127,5 @@
 #include "./Params/IntMatParam.h"
 #include "./Params/FileParam.h"
+#include "./Params/Parameters.h"
 #include "./Params/Param.h"
 #include "./Params/MatrixParam.h"
Index: issm/trunk-jpl/src/c/main/issm.h
===================================================================
--- issm/trunk-jpl/src/c/main/issm.h	(revision 14995)
+++ issm/trunk-jpl/src/c/main/issm.h	(revision 14996)
@@ -15,5 +15,4 @@
 #include "../shared/shared.h"
 #include "../classes/classes.h"
-#include "../Container/Container.h"
 #include "../shared/Enum/Enum.h"
 #include "../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 14996)
@@ -11,5 +11,4 @@
 
 #include "./AverageOntoPartitionx.h"
-#include "../../Container/Container.h"    
 #include "../../shared/shared.h"
 #include "../../shared/Enum/Enum.h"
Index: issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 void AverageOntoPartitionx(double** average, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* vertex_response);
Index: issm/trunk-jpl/src/c/modules/Chacox/Chacox.h
===================================================================
--- issm/trunk-jpl/src/c/modules/Chacox/Chacox.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Chacox/Chacox.h	(revision 14996)
@@ -32,5 +32,4 @@
 #endif
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.h	(revision 14996)
@@ -6,5 +6,5 @@
 #define _CONFIGUREOBJECTSX_H
 
-#include "../../Container/Container.h"
+#include "../../classes/classes.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _CONSTRAINTSSTATELOCAL_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _CONSTRAINTSSTATEX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/ControlInputGetGradientx/ControlInputGetGradientx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ControlInputGetGradientx/ControlInputGetGradientx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ControlInputGetGradientx/ControlInputGetGradientx.h	(revision 14996)
@@ -6,5 +6,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 void	ControlInputGetGradientx( Vector<IssmDouble>** pgradient, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters);
Index: issm/trunk-jpl/src/c/modules/ControlInputScaleGradientx/ControlInputScaleGradientx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ControlInputScaleGradientx/ControlInputScaleGradientx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ControlInputScaleGradientx/ControlInputScaleGradientx.h	(revision 14996)
@@ -6,5 +6,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 void	ControlInputScaleGradientx(Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,IssmDouble* norm_list,int step);
Index: issm/trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.h	(revision 14996)
@@ -6,5 +6,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 void	ControlInputSetGradientx(Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,double* gradient);
Index: issm/trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.h	(revision 14996)
@@ -5,5 +5,4 @@
 #define _CREATENODALCONSTRAINTSX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _DELTA18OPARAMETERIZATIONX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _DRAGCOEFFABSGRADX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/EdgeDetectionx/EdgeDetectionx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/EdgeDetectionx/EdgeDetectionx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/EdgeDetectionx/EdgeDetectionx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include <string.h>
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include <float.h>    /*  DBL_MAX  */
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h	(revision 14996)
@@ -6,5 +6,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 14996)
@@ -6,5 +6,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/classes.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/Gradjx/Gradjx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/Gradjx/Gradjx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Gradjx/Gradjx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _GRADJX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 14996)
@@ -7,5 +7,4 @@
 #include "../../toolkits/toolkits.h"
 #include "../../shared/Enum/Enum.h"
-#include "../../Container/Container.h"
 #include "../../classes/classes.h"
 #include "./GroundinglineMigrationx.h"
Index: issm/trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InputControlUpdatex/InputControlUpdatex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputControlUpdatex/InputControlUpdatex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputControlUpdatex/InputControlUpdatex.h	(revision 14996)
@@ -6,5 +6,5 @@
 #define _INPUTCONTROLUPDATEX_H
 
-#include "../../Container/Container.h"
+#include "../../classes/classes.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.h	(revision 14996)
@@ -5,5 +5,5 @@
 #define _INPUTCONVERGENCEX_H
 
-#include "../../Container/Container.h"
+#include "../../classes/classes.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h	(revision 14996)
@@ -6,5 +6,5 @@
 #define _INPUTDUPLICATEX_H
 
-#include "../../Container/Container.h"
+#include "../../classes/classes.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InputScalex/InputScalex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputScalex/InputScalex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputScalex/InputScalex.h	(revision 14996)
@@ -6,5 +6,5 @@
 #define _SCALEINPUTX_H
 
-#include "../../Container/Container.h"
+#include "../../classes/classes.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h	(revision 14996)
@@ -6,5 +6,5 @@
 #define _INPUTTORESULTX_H
 
-#include "../../Container/Container.h"
+#include "../../classes/classes.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 void  InputUpdateFromDakotax(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials*  materials,Parameters* parameters,double* variables,char* *variables_descriptors,int numvariables);
Index: issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 14996)
@@ -7,5 +7,4 @@
 #include "../../toolkits/toolkits.h"
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 using namespace bamg;
Index: issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 14996)
@@ -5,5 +5,4 @@
 #define _IOMODEL_TO_CONSTRAINTS_H_
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include <float.h>    /*  DBL_MAX  */
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/KMLMeshWritex/KMLMeshWritex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/KMLMeshWritex/KMLMeshWritex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/KMLMeshWritex/KMLMeshWritex.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include <float.h>    /*  DBL_MAX  */
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/KMLOverlayx/KMLOverlayx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/KMLOverlayx/KMLOverlayx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/KMLOverlayx/KMLOverlayx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include <float.h>    /*  DBL_MAX  */
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include <float.h>    /*  DBL_MAX  */
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp	(revision 14996)
@@ -6,6 +6,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/objects/objects.h"
-#include "../../Container/Observations.h"
+#include "../../classes/classes.h"
 #include "../modules.h"
 #ifdef _HAVE_GSL_
Index: issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 14996)
@@ -7,5 +7,4 @@
 #include "../../toolkits/toolkits.h"
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 #include "../../shared/io/io.h"
 
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */ 
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 14996)
@@ -1,3 +1,2 @@
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */ 
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../Container/Container.h"
 #include "../../toolkits/toolkits.h"
 #include "../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 14996)
@@ -9,5 +9,4 @@
 #endif
 
-#include "../../Container/Container.h"
 #include "../../toolkits/toolkits.h"
 #include "../../shared/Enum/Enum.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */ 
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/Enum/Enum.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 14996)
@@ -8,5 +8,4 @@
 #endif
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/Enum/Enum.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */ 
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/Enum/Enum.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateParametersHydrologyDCInefficient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateParametersHydrologyDCInefficient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateParametersHydrologyDCInefficient.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */ 
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/Enum/Enum.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */ 
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 14996)
@@ -12,5 +12,4 @@
 #include "../../shared/shared.h"
 #include "../../shared/io/io.h"
-#include "../../Container/Container.h"
 #include "../../shared/Enum/Enum.h"
 #include "./ModelProcessorx.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 14996)
@@ -8,5 +8,4 @@
 #define RIFTINFOSIZE 12
 
-#include "../../Container/Container.h"
 #include "../../classes/classes.h"
 
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 14996)
@@ -1,3 +1,2 @@
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/Enum/Enum.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/Enum/Enum.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../shared/io/io.h"
 #include "../../../toolkits/toolkits.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 14996)
@@ -2,5 +2,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 14996)
@@ -3,5 +3,4 @@
  */
 
-#include "../../../Container/Container.h"
 #include "../../../toolkits/toolkits.h"
 #include "../../../shared/io/io.h"
Index: issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _NODALVALUEX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/NodesDofx/NodesDofx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/NodesDofx/NodesDofx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/NodesDofx/NodesDofx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _NODESDOFX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 14996)
@@ -12,5 +12,4 @@
 #include <stdio.h>
 #include "./OutputResultsx.h"
-#include "../../Container/Container.h"
 #include "../../shared/io/io.h"
 #include "../../classes/objects/objects.h"
Index: issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h	(revision 14996)
@@ -12,5 +12,5 @@
 #endif
 
-#include "../../Container/Container.h"
+#include "../../classes/classes.h"
 
 void OutputResultsx(Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads,  Materials* materials, Parameters* parameters, Results* results);
Index: issm/trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.h	(revision 14996)
@@ -6,5 +6,5 @@
 #define _OUTPUTRIFTSX_H
 
-#include "../../Container/Container.h"
+#include "../../classes/classes.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _PARSEPETSCOPTIONSX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _POSITIVEDEGREEDAYX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h	(revision 14996)
@@ -5,5 +5,5 @@
 #define _PROPAGATEFLAGSFROMCONNECTIVITYX_H
 
-#include "../../Container/Container.h"
+#include "../../classes/classes.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.h	(revision 14996)
@@ -8,6 +8,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Parameters.h"
-#include "../../Container/Nodes.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h	(revision 14996)
@@ -8,5 +8,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _RESETCONSTRAINTSX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _RESETCOORDINATESYSTEMX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _RHEOLOGYBBARGRADIENTX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/Scotchx/Scotchx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/Scotchx/Scotchx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Scotchx/Scotchx.h	(revision 14996)
@@ -17,5 +17,4 @@
 #include <stdio.h>
 #include <string.h>
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.h	(revision 14996)
@@ -6,5 +6,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.h	(revision 14996)
@@ -18,5 +18,4 @@
 #endif
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.h	(revision 14996)
@@ -18,5 +18,4 @@
 #endif
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _SMBGRADIENTSX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/SpcNodesx/SpcNodesx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/SpcNodesx/SpcNodesx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/SpcNodesx/SpcNodesx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 #include "../../toolkits/toolkits.h"
 
Index: issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _SURFACEABSVELMISFITX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h
===================================================================
--- issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include "../../classes/objects/objects.h"
-#include "../../Container/Container.h"
 
 /* local prototypes: */
Index: issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _SURFACEAVERAGEVELMISFITX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _SURFACELOGVELMISFITX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _SURFACELOGVXVYMISFITX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _SURFACERELVELMISFITX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _THICKNESSABSMISFITX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _THICKNESSACROSSGRADIENT_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _THICKNESSALONGGRADIENT_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h	(revision 14996)
@@ -7,5 +7,4 @@
 
 #include <string.h>
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _UPDATEDYNAMICCONSTRAINTSXX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/VecMergex/VecMergex.h
===================================================================
--- issm/trunk-jpl/src/c/modules/VecMergex/VecMergex.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/VecMergex/VecMergex.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _VECMERGEX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/VertexCoordinatesx/VertexCoordinatesx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/VertexCoordinatesx/VertexCoordinatesx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/VertexCoordinatesx/VertexCoordinatesx.h	(revision 14996)
@@ -5,5 +5,4 @@
 #define _VERTEX_COORDINATESX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.h	(revision 14995)
+++ issm/trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.h	(revision 14996)
@@ -6,5 +6,4 @@
 #define _VERTICESDOFX_H
 
-#include "../../Container/Container.h"
 #include "../../classes/objects/objects.h"
 
Index: issm/trunk-jpl/src/c/toolkits/gsl/DenseGslSolve.cpp
===================================================================
--- issm/trunk-jpl/src/c/toolkits/gsl/DenseGslSolve.cpp	(revision 14995)
+++ issm/trunk-jpl/src/c/toolkits/gsl/DenseGslSolve.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 #include "../../classes/classes.h"
 #include "../../shared/io/io.h"
-#include "../../Container/Parameters.h"
 
 #ifdef _HAVE_GSL_
Index: issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
===================================================================
--- issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 14995)
+++ issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 14996)
@@ -20,6 +20,6 @@
 #include "../../shared/Exceptions/exceptions.h"
 #include "../../shared/MemOps/MemOps.h"
-#include "../../Container/DataSet.h"
 #include "../../shared/io/Comm/Comm.h"
+#include "../../classes/objects/DataSet.h"
 #include "../../classes/objects/Bucket.h"
 #include "../mumps/mumpsincludes.h"
Index: issm/trunk-jpl/src/wrappers/AverageFilter/AverageFilter.h
===================================================================
--- issm/trunk-jpl/src/wrappers/AverageFilter/AverageFilter.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/AverageFilter/AverageFilter.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.h
===================================================================
--- issm/trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 #include "../../c/shared/io/io.h"
Index: issm/trunk-jpl/src/wrappers/BamgMesher/BamgMesher.h
===================================================================
--- issm/trunk-jpl/src/wrappers/BamgMesher/BamgMesher.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/BamgMesher/BamgMesher.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.h
===================================================================
--- issm/trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/Chaco/Chaco.h
===================================================================
--- issm/trunk-jpl/src/wrappers/Chaco/Chaco.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/Chaco/Chaco.h	(revision 14996)
@@ -24,5 +24,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.h
===================================================================
--- issm/trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.h	(revision 14996)
@@ -22,5 +22,4 @@
 #include "../../c/toolkits/toolkits.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 #include "../../c/shared/io/io.h"
Index: issm/trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.h
===================================================================
--- issm/trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/EdgeDetection/EdgeDetection.h
===================================================================
--- issm/trunk-jpl/src/wrappers/EdgeDetection/EdgeDetection.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/EdgeDetection/EdgeDetection.h	(revision 14996)
@@ -22,5 +22,4 @@
 #include "../../c/toolkits/toolkits.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 #include "../../c/shared/io/io.h"
Index: issm/trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.h
===================================================================
--- issm/trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.h	(revision 14996)
@@ -22,5 +22,4 @@
 #include "../../c/toolkits/toolkits.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 #include "../../c/shared/io/io.h"
Index: issm/trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.h
===================================================================
--- issm/trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/ExpSimplify/ExpSimplify.h
===================================================================
--- issm/trunk-jpl/src/wrappers/ExpSimplify/ExpSimplify.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/ExpSimplify/ExpSimplify.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/HoleFiller/HoleFiller.h
===================================================================
--- issm/trunk-jpl/src/wrappers/HoleFiller/HoleFiller.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/HoleFiller/HoleFiller.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h
===================================================================
--- issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.h
===================================================================
--- issm/trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h
===================================================================
--- issm/trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h
===================================================================
--- issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h	(revision 14996)
@@ -22,5 +22,4 @@
 #include "../../c/toolkits/toolkits.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 #include "../../c/shared/io/io.h"
Index: issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h
===================================================================
--- issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.h
===================================================================
--- issm/trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.h
===================================================================
--- issm/trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.h
===================================================================
--- issm/trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.h
===================================================================
--- issm/trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/Ll2xy/Ll2xy.h
===================================================================
--- issm/trunk-jpl/src/wrappers/Ll2xy/Ll2xy.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/Ll2xy/Ll2xy.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h
===================================================================
--- issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.h
===================================================================
--- issm/trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.h
===================================================================
--- issm/trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.h	(revision 14996)
@@ -25,5 +25,4 @@
 #include "../../c/toolkits/toolkits.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 #include "../../c/shared/io/io.h"
Index: issm/trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.h
===================================================================
--- issm/trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h
===================================================================
--- issm/trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/Scotch/Scotch.h
===================================================================
--- issm/trunk-jpl/src/wrappers/Scotch/Scotch.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/Scotch/Scotch.h	(revision 14996)
@@ -12,5 +12,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
     
Index: issm/trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.h
===================================================================
--- issm/trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.h
===================================================================
--- issm/trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/TriMesh/TriMesh.h
===================================================================
--- issm/trunk-jpl/src/wrappers/TriMesh/TriMesh.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/TriMesh/TriMesh.h	(revision 14996)
@@ -22,5 +22,4 @@
 #include "../../c/toolkits/toolkits.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 #include "../../c/shared/io/io.h"
Index: issm/trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h
===================================================================
--- issm/trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/TriaSearch/TriaSearch.h
===================================================================
--- issm/trunk-jpl/src/wrappers/TriaSearch/TriaSearch.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/TriaSearch/TriaSearch.h	(revision 14996)
@@ -19,5 +19,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/Xy2ll/Xy2ll.h
===================================================================
--- issm/trunk-jpl/src/wrappers/Xy2ll/Xy2ll.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/Xy2ll/Xy2ll.h	(revision 14996)
@@ -20,5 +20,4 @@
 #include "../../c/main/globals.h"
 #include "../../c/modules/modules.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
===================================================================
--- issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 14996)
@@ -10,5 +10,4 @@
 
 #include "./matlabio.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 
Index: issm/trunk-jpl/src/wrappers/matlab/io/matlabio.h
===================================================================
--- issm/trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../include/matlabincludes.h"
 #include "../../c/classes/classes.h"
-#include "../../c/Container/Container.h"
 #include "../../c/toolkits/toolkits.h"
 
Index: issm/trunk-jpl/src/wrappers/python/io/WritePythonData.cpp
===================================================================
--- issm/trunk-jpl/src/wrappers/python/io/WritePythonData.cpp	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/python/io/WritePythonData.cpp	(revision 14996)
@@ -13,5 +13,4 @@
 
 #include "./pythonio.h"
-#include "../../c/Container/Container.h"
 #include "../../c/shared/shared.h"
 #include "../../c/shared/Enum/Enum.h"
Index: issm/trunk-jpl/src/wrappers/python/io/pythonio.h
===================================================================
--- issm/trunk-jpl/src/wrappers/python/io/pythonio.h	(revision 14995)
+++ issm/trunk-jpl/src/wrappers/python/io/pythonio.h	(revision 14996)
@@ -14,5 +14,4 @@
 #include "../include/pythonincludes.h"
 #include "../../c/classes/classes.h"
-#include "../../c/Container/Container.h"
 
 void WriteData(PyObject* py_tuple,int index, double* matrix, int M,int N);
