Index: /issm/trunk/src/c/objects/Loads/Friction.cpp
===================================================================
--- /issm/trunk/src/c/objects/Loads/Friction.cpp	(revision 4006)
+++ /issm/trunk/src/c/objects/Loads/Friction.cpp	(revision 4007)
@@ -27,7 +27,8 @@
 }
 /*}}}*/
-/*FUNCTION Friction::Friction(char* element_type, Inputs* inputs,Matpar* matpar){{{1*/
-Friction::Friction(char* element_type_in,Inputs* inputs_in,Matpar* matpar_in){
+/*FUNCTION Friction::Friction(char* element_type, Inputs* inputs,Matpar* matpar,int analysis_type){{{1*/
+Friction::Friction(char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int in_analysis_type){
 
+	this->analysis_type=in_analysis_type;
 	this->inputs=inputs_in;
 	this->element_type=(char*)xmalloc((strlen(element_type_in)+1)*sizeof(char));
@@ -45,4 +46,5 @@
 void Friction::Echo(void){
 	printf("Friction:\n");
+	printf("   analysis_type: %s\n",EnumAsString(analysis_type));
 	printf("   element_type: %s\n",this->element_type);
 	inputs->Echo();
Index: /issm/trunk/src/c/objects/Loads/Friction.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Friction.h	(revision 4006)
+++ /issm/trunk/src/c/objects/Loads/Friction.h	(revision 4007)
@@ -15,4 +15,5 @@
 
 	public:
+		int analysis_type;
 
 		char* element_type;
@@ -22,5 +23,5 @@
 		/*methods: */
 		Friction();
-		Friction(char* element_type, Inputs* inputs,Matpar* matpar);
+		Friction(char* element_type, Inputs* inputs,Matpar* matpar, int analysis_type);
 		~Friction();
 	
Index: /issm/trunk/src/c/objects/Loads/Icefront.cpp
===================================================================
--- /issm/trunk/src/c/objects/Loads/Icefront.cpp	(revision 4006)
+++ /issm/trunk/src/c/objects/Loads/Icefront.cpp	(revision 4007)
@@ -179,5 +179,4 @@
 	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
 	 *object data (thanks to DataSet::Demarshall):*/
-
 	memcpy(&id,marshalled_dataset,sizeof(id));marshalled_dataset+=sizeof(id);
 	memcpy(&analysis_type,marshalled_dataset,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
Index: /issm/trunk/src/c/objects/Loads/Icefront.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Icefront.h	(revision 4006)
+++ /issm/trunk/src/c/objects/Loads/Icefront.h	(revision 4007)
@@ -57,7 +57,4 @@
 		void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
 		bool  InAnalysis(int analysis_type);
-
-
-
 		/*}}}*/
 		/*numerics: {{{1*/
Index: /issm/trunk/src/c/objects/Loads/Numericalflux.cpp
===================================================================
--- /issm/trunk/src/c/objects/Loads/Numericalflux.cpp	(revision 4006)
+++ /issm/trunk/src/c/objects/Loads/Numericalflux.cpp	(revision 4007)
@@ -25,34 +25,6 @@
 }
 /*}}}*/
-/*FUNCTION Numericalflux::Numericalflux(int numericalflux_id,int* numericalflux_node_ids,...){{{1*/
-Numericalflux::Numericalflux(int numericalflux_id,int* numericalflux_node_ids,int numnodes,int* numericalflux_element_ids, int numelements):
-	hnodes(numericalflux_node_ids,numnodes),
-	helements(numericalflux_element_ids,numelements)
-{
-
-	id=numericalflux_id;
-	this->parameters=NULL;
-	this->inputs=new Inputs();
-}
-/*}}}*/
-/*FUNCTION Numericalflux::Numericalflux(int id, Hook* hnodes, Hook* helements, Parameters* parameters, Inputs* numericalflux_inputs) {{{1*/
-Numericalflux::Numericalflux(int numericalflux_id,Hook* numericalflux_hnodes, Hook* numericalflux_helements, Parameters* numericalflux_parameters, Inputs* numericalflux_inputs):
-	hnodes(numericalflux_hnodes),
-	helements(numericalflux_helements)
-{
-
-	/*all the initialization has been done by the initializer, just fill in the id: */
-	this->id=numericalflux_id;
-	if(numericalflux_inputs){
-		this->inputs=(Inputs*)numericalflux_inputs->Copy();
-	}
-	else{
-		this->inputs=new Inputs();
-	}
-	/*point parameters: */
-	this->parameters=numericalflux_parameters;
-}
-/*}}}*//*FUNCTION Numericalflux::Numericalflux(int id, int i, IoModel* iomodel) {{{1*/
-Numericalflux::Numericalflux(int numericalflux_id,int i, IoModel* iomodel){
+/*}}}*//*FUNCTION Numericalflux::Numericalflux(int id, int i, IoModel* iomodel, int analysis_type) {{{1*/
+Numericalflux::Numericalflux(int numericalflux_id,int i, IoModel* iomodel, int in_analysis_type){
 
 	/* Intermediary */
@@ -134,4 +106,5 @@
 	/*Ok, we have everything to build the object: */
 	this->id=numericalflux_id;
+	this->analysis_type=in_analysis_type;
 
 	/*Hooks: */
@@ -145,4 +118,35 @@
 	//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
 	this->parameters=NULL;
+}
+/*}}}*/
+/*FUNCTION Numericalflux::copy {{{1*/
+Object* Numericalflux::copy() {
+	
+	Numericalflux* numericalflux=NULL;
+
+	numericalflux=new Numericalflux();
+
+	/*copy fields: */
+	numericalflux->id=this->id;
+	numericalflux->analysis=this->analysis;
+	if(this->inputs){
+		numericalflux->inputs=(Inputs*)this->inputs->Copy();
+	}
+	else{
+		numericalflux->inputs=new Inputs();
+	}
+	/*point parameters: */
+	numericalflux->parameters=this->parameters;
+
+	/*now deal with hooks and objects: */
+	numericalflux->hnodes.copy(&this->hnodes);
+	numericalflux->helement.copy(&this->helement);
+
+	/*recover objects: */
+	numericalflux->nodes=(Node**)numericalflux->hnodes.deliverp();
+	numericalflux->element=(Element*)numericalflux->helement.delivers();
+
+	return numericalflux;
+
 }
 /*}}}*/
@@ -168,9 +172,4 @@
 }
 /*}}}*/
-/*FUNCTION Numericalflux::copy {{{1*/
-Object* Numericalflux::copy() {
-	return new Numericalflux(this->id,&this->hnodes,&this->helements,this->parameters,this->inputs);
-}
-/*}}}*/
 /*FUNCTION Numericalflux::DeepEcho {{{1*/
 void Numericalflux::DeepEcho(void){
@@ -178,4 +177,5 @@
 	printf("Numericalflux:\n");
 	printf("   id: %i\n",id);
+	printf("   analysis_type: %s\n",EnumAsString(analysis_type));
 	hnodes.DeepEcho();
 	helements.DeepEcho();
@@ -198,6 +198,6 @@
 	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
 	 *object data (thanks to DataSet::Demarshall):*/
-
 	memcpy(&id,marshalled_dataset,sizeof(id));marshalled_dataset+=sizeof(id);
+	memcpy(&analysis_type,marshalled_dataset,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
 
 	/*demarshall hooks: */
@@ -247,4 +247,5 @@
 	/*marshall Numericalflux data: */
 	memcpy(marshalled_dataset,&id,sizeof(id));marshalled_dataset+=sizeof(id);
+	memcpy(marshalled_dataset,&analysis_type,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
 
 	/*Marshall hooks: */
@@ -270,4 +271,5 @@
 
 	return sizeof(id)
+		+sizeof(analysis_type)
 		+hnodes.MarshallSize()
 		+helements.MarshallSize()
Index: /issm/trunk/src/c/objects/Loads/Numericalflux.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Numericalflux.h	(revision 4006)
+++ /issm/trunk/src/c/objects/Loads/Numericalflux.h	(revision 4007)
@@ -20,4 +20,5 @@
 	public: 
 		int         id;
+		int analysis_type;
 
 		Hook        helements;
@@ -29,11 +30,9 @@
 		/*Constructors {{{1*/
 		Numericalflux();
-		Numericalflux(int numericalflux_id,int* numericalflux_node_ids,int numnodes, int* numericalflux_element_ids, int numelements);
-		Numericalflux(int numericalflux_id,Hook* numericalflux_hnodes, Hook* numericalflux_helements, Parameters* parameters, Inputs* numericalflux_inputs);
-		Numericalflux(int numericalflux_id,int i, IoModel* iomodel);
+		Numericalflux(int numericalflux_id,int i, IoModel* iomodel,int analysis_type);
 		~Numericalflux();
+		Object* copy();
 		/*}}}*/
 		/*Object management: {{{1*/
-		Object* copy();
 		void  Configure(DataSet* elements,DataSet* loads,DataSet* nodes,DataSet* vertices,DataSet* materials,Parameters* parameters);
 		void  DeepEcho();
Index: /issm/trunk/src/c/objects/Loads/Pengrid.cpp
===================================================================
--- /issm/trunk/src/c/objects/Loads/Pengrid.cpp	(revision 4006)
+++ /issm/trunk/src/c/objects/Loads/Pengrid.cpp	(revision 4007)
@@ -30,48 +30,6 @@
 }
 /*}}}1*/
-/*FUNCTION Pengrid::Pengrid(int id, int node_ids int matpar_id){{{1*/
-Pengrid::Pengrid(int pengrid_id,int pengrid_node_id, int pengrid_element_id,int pengrid_matpar_id): 
-	hnode(&pengrid_node_id,1),
-	helement(&pengrid_element_id,1),
-	hmatpar(&pengrid_matpar_id,1)
-{
-
-	/*all the initialization has been done by the initializer, just fill in the id: */
-	this->id=pengrid_id;
-	this->parameters=NULL;
-	this->inputs=new Inputs();
-
-	/*not active, not zigzagging: */
-	active=0;
-	zigzag_counter=0;
-
-}
-/*}}}*/
-/*FUNCTION Pengrid::Pengrid(int id, Hook* hnodes, Hook* hmatice, Hook* hmatpar, Parameters* parameters, Inputs* pengrid_inputs) {{{1*/
-Pengrid::Pengrid(int pengrid_id,Hook* pengrid_hnode, Hook* pengrid_helement,Hook* pengrid_hmatpar, Parameters* pengrid_parameters, Inputs* pengrid_inputs):
-	hnode(pengrid_hnode),
-	helement(pengrid_helement),
-	hmatpar(pengrid_hmatpar)
-{
-
-	/*all the initialization has been done by the initializer, just fill in the id: */
-	this->id=pengrid_id;
-	if(pengrid_inputs){
-		this->inputs=(Inputs*)pengrid_inputs->Copy();
-	}
-	else{
-		this->inputs=new Inputs();
-	}
-	/*point parameters: */
-	this->parameters=pengrid_parameters;
-	
-	/*not active, not zigzagging: */
-	active=0;
-	zigzag_counter=0;
-
-}
-/*}}}*/
-/*FUNCTION Pengrid::Pengrid(int index, int id, IoModel* iomodel){{{1*/
-Pengrid::Pengrid(int id, int index, IoModel* iomodel){ //i is the element index
+/*FUNCTION Pengrid::Pengrid(int index, int id, IoModel* iomodel,int analysis_type){{{1*/
+Pengrid::Pengrid(int id, int index, IoModel* iomodel, int in_analysis_type){ //i is the element index
 
 	int i,j;
@@ -86,4 +44,5 @@
 	/*id: */
 	this->id=id;
+	this->analysis_type=in_analysis_type;
 	
 	/*hooks: */
@@ -105,4 +64,41 @@
 	this->active=0;
 	this->zigzag_counter=0;
+
+}
+/*}}}*/
+/*FUNCTION Icefront::copy {{{1*/
+Object* Pengrid::copy() {
+	
+	Pengrid* pengrid=NULL;
+
+	pengrid=new Pengrid();
+
+	/*copy fields: */
+	pengrid->id=this->id;
+	pengrid->analysis=this->analysis;
+	if(this->inputs){
+		pengrid->inputs=(Inputs*)this->inputs->Copy();
+	}
+	else{
+		pengrid->inputs=new Inputs();
+	}
+	/*point parameters: */
+	pengrid->parameters=this->parameters;
+
+	/*now deal with hooks and objects: */
+	pengrid->hnode.copy(&this->hnodes);
+	pengrid->helement.copy(&this->helement);
+	pengrid->hmatpar.copy(&this->hmatpar);
+
+	/*recover objects: */
+	pengrid->node=(Node**)pengrid->hnode.deliverp();
+	pengrid->element=(Element*)pengrid->helement.delivers();
+	pengrid->matpar=(Matpar*)pengrid->hmatpar.delivers();
+
+	//let's not forget internals
+	pengrid->active=this->active=0;
+	pengrid->zigzag_counter=this->zigzag_counter=0;
+
+	return pengrid;
 
 }
@@ -128,9 +124,4 @@
 }
 /*}}}1*/
-/*FUNCTION Pengrid::copy {{{1*/
-Object* Pengrid::copy() {
-	return new Pengrid(this->id,&this->hnode,&this->helement,&this->hmatpar,this->parameters,this->inputs);
-}
-/*}}}1*/
 /*FUNCTION Pengrid::DeepEcho{{{1*/
 void Pengrid::DeepEcho(void){
@@ -138,4 +129,5 @@
 	printf("Pengrid:\n");
 	printf("   id: %i\n",id);
+	printf("   analysis_type: %s\n",EnumAsString(analysis_type));
 	hnode.DeepEcho();
 	helement.DeepEcho();
@@ -162,4 +154,5 @@
 
 	memcpy(&id,marshalled_dataset,sizeof(id));marshalled_dataset+=sizeof(id);
+	memcpy(&analysis_type,marshalled_dataset,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
 	memcpy(&active,marshalled_dataset,sizeof(active));marshalled_dataset+=sizeof(active);
 	memcpy(&zigzag_counter,marshalled_dataset,sizeof(zigzag_counter));marshalled_dataset+=sizeof(zigzag_counter);
@@ -214,4 +207,5 @@
 	/*marshall Tria data: */
 	memcpy(marshalled_dataset,&id,sizeof(id));marshalled_dataset+=sizeof(id);
+	memcpy(marshalled_dataset,&analysis_type,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
 	memcpy(marshalled_dataset,&active,sizeof(active));marshalled_dataset+=sizeof(active);
 	memcpy(marshalled_dataset,&zigzag_counter,sizeof(zigzag_counter));marshalled_dataset+=sizeof(zigzag_counter);
@@ -240,4 +234,5 @@
 	
 	return sizeof(id)
+		+sizeof(analysis_type)
 		+sizeof(active)
 		+sizeof(zigzag_counter)
Index: /issm/trunk/src/c/objects/Loads/Pengrid.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Pengrid.h	(revision 4006)
+++ /issm/trunk/src/c/objects/Loads/Pengrid.h	(revision 4007)
@@ -19,4 +19,5 @@
 
 		int		id;
+		int analysis_type;
 		
 		Hook hnode;  //hook to 1 node
@@ -35,12 +36,10 @@
 		/*FUNCTION constructors, destructors {{{1*/
 		Pengrid();
-		Pengrid(int pengrid_id,int pengrid_node_id, int pengrid_element_id,int pengrid_matpar_id);
-		Pengrid(int pengrid_id,Hook* pengrid_hnode, Hook* pengrid_helement,Hook* pengrid_hmatpar, Parameters* pengrid_parameters, Inputs* pengrid_inputs);
-		Pengrid(int index, int id, IoModel* iomodel);
+		Pengrid(int index, int id, IoModel* iomodel,int analysis_type);
 		~Pengrid();
+		Object* copy();
 		/*}}}*/
 		/*FUNCTION object management {{{1*/
 		void  Configure(DataSet* elementsin,DataSet* loadsin,DataSet* nodesin,DataSet* verticesin,DataSet* materialsin,Parameters* parametersin);
-		Object* copy();
 		void  DeepEcho();
 		void  Demarshall(char** pmarshalled_dataset);
Index: /issm/trunk/src/c/objects/Loads/Penpair.cpp
===================================================================
--- /issm/trunk/src/c/objects/Loads/Penpair.cpp	(revision 4006)
+++ /issm/trunk/src/c/objects/Loads/Penpair.cpp	(revision 4007)
@@ -24,5 +24,5 @@
 /*}}}1*/
 /*FUNCTION Penpair::creation {{{1*/
-Penpair::Penpair(int penpair_id, int* penpair_node_ids):
+Penpair::Penpair(int penpair_id, int* penpair_node_ids,int in_analysis_type):
 	hnodes(penpair_node_ids,2)
 {
@@ -30,4 +30,5 @@
 	/*all the initialization has been done by the initializer, just fill in the id: */
 	this->id=penpair_id;
+	this->analysis_type=in_analysis_type;
 	
 	return;
@@ -35,5 +36,5 @@
 /*}}}1*/
 /*FUNCTION Penpair::creation {{{1*/
-Penpair::Penpair(int penpair_id, Hook* penpair_hnodes):
+Penpair::Penpair(int penpair_id, Hook* penpair_hnodes,int in_analysis_type):
 	hnodes(penpair_hnodes)
 {
@@ -41,8 +42,30 @@
 	/*all the initialization has been done by the initializer, just fill in the id: */
 	this->id=penpair_id;
-	
-	return;
-}
-/*}}}1*/
+	this->analysis_type=in_analysis_type;
+	
+	return;
+}
+/*}}}1*/
+/*FUNCTION Penpair::copy {{{1*/
+Object* Penpair::copy() {
+	
+	Penpair* penpair=NULL;
+
+	penpair=new Penpair();
+
+	/*copy fields: */
+	penpair->id=this->id;
+	penpair->analysis=this->analysis;
+
+	/*now deal with hooks and objects: */
+	penpair->hnodes.copy(&this->hnodes);
+
+	/*recover objects: */
+	penpair->nodes=(Node**)penpair->hnodes.deliverp();
+
+	return penpair;
+
+}
+/*}}}*/
 /*FUNCTION Penpair::destructor {{{1*/
 Penpair::~Penpair(){
@@ -61,9 +84,4 @@
 }
 /*}}}1*/
-/*FUNCTION Penpair::copy {{{1*/
-Object* Penpair::copy() {
-	return new Penpair(this->id,&this->hnodes); 
-}
-/*}}}1*/
 /*FUNCTION Penpair::DeepEcho {{{1*/
 void Penpair::DeepEcho(void){
@@ -71,8 +89,31 @@
 	printf("Penpair:\n");
 	printf("   id: %i\n",id);
+	printf("   analysis_type: %s\n",EnumAsString(analysis_type));
 	hnodes.DeepEcho();
 
 	return;
 }		
+/*}}}1*/
+/*FUNCTION Penpair::Demarshall {{{1*/
+void  Penpair::Demarshall(char** pmarshalled_dataset){
+
+	int i;
+	char* marshalled_dataset=NULL;
+
+	/*recover marshalled_dataset: */
+	marshalled_dataset=*pmarshalled_dataset;
+
+	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
+	 *object data (thanks to DataSet::Demarshall):*/
+	memcpy(&id,marshalled_dataset,sizeof(id));marshalled_dataset+=sizeof(id);
+	memcpy(&analysis_type,marshalled_dataset,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
+
+	/*demarshall hooks: */
+	hnodes.Demarshall(&marshalled_dataset);
+
+	/*return: */
+	*pmarshalled_dataset=marshalled_dataset;
+	return;
+}
 /*}}}1*/
 /*FUNCTION Penpair::Echo {{{1*/
@@ -83,8 +124,18 @@
 	printf("Penpair:\n");
 	printf("   id: %i\n",id);
+	printf("   analysis_type: %s\n",EnumAsString(analysis_type));
 	hnodes.Echo();
 	
 	return;
 }
+/*}}}1*/
+/*FUNCTION Penpair::Enum {{{1*/
+int Penpair::Enum(void){
+
+	return PenpairEnum;
+}
+/*}}}1*/
+/*FUNCTION Penpair::Id {{{1*/
+int    Penpair::Id(void){ return id; }
 /*}}}1*/
 /*FUNCTION Penpair::Marshall {{{1*/
@@ -105,4 +156,5 @@
 	/*marshall Penpair data: */
 	memcpy(marshalled_dataset,&id,sizeof(id));marshalled_dataset+=sizeof(id);
+	memcpy(marshalled_dataset,&analysis_type,sizeof(analysis_type));marshalled_dataset+=sizeof(analysis_type);
 
 	/*Marshall hooks*/
@@ -117,57 +169,8 @@
 
 	return sizeof(id)+
+		+sizeof(analysis_type)
 		+hnodes.MarshallSize()
 		+sizeof(int); //sizeof(int) for enum type
 }
-/*}}}1*/
-/*FUNCTION Penpair::Demarshall {{{1*/
-void  Penpair::Demarshall(char** pmarshalled_dataset){
-
-	int i;
-	char* marshalled_dataset=NULL;
-
-	/*recover marshalled_dataset: */
-	marshalled_dataset=*pmarshalled_dataset;
-
-	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
-	 *object data (thanks to DataSet::Demarshall):*/
-
-	memcpy(&id,marshalled_dataset,sizeof(id));marshalled_dataset+=sizeof(id);
-
-	/*demarshall hooks: */
-	hnodes.Demarshall(&marshalled_dataset);
-
-	/*return: */
-	*pmarshalled_dataset=marshalled_dataset;
-	return;
-}
-/*}}}1*/
-
-/*Object functions*/
-/*FUNCTION Penpair::CreateKMatrix {{{1*/
-
-void  Penpair::CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type){
-
-	/*No loads applied, do nothing: */
-	return;
-
-}
-/*}}}1*/
-/*FUNCTION Penpair::CreatePVector {{{1*/
-void  Penpair::CreatePVector(Vec pg, int analysis_type,int sub_analysis_type){
-
-	/*No loads applied, do nothing: */
-	return;
-
-}
-/*}}}1*/
-/*FUNCTION Penpair::Enum {{{1*/
-int Penpair::Enum(void){
-
-	return PenpairEnum;
-}
-/*}}}1*/
-/*FUNCTION Penpair::Id {{{1*/
-int    Penpair::Id(void){ return id; }
 /*}}}1*/
 /*FUNCTION Penpair::MyRank {{{1*/
@@ -177,4 +180,23 @@
 }
 /*}}}1*/
+
+/*Object functions*/
+/*FUNCTION Penpair::CreateKMatrix {{{1*/
+
+void  Penpair::CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type){
+
+	/*No loads applied, do nothing: */
+	return;
+
+}
+/*}}}1*/
+/*FUNCTION Penpair::CreatePVector {{{1*/
+void  Penpair::CreatePVector(Vec pg, int analysis_type,int sub_analysis_type){
+
+	/*No loads applied, do nothing: */
+	return;
+
+}
+/*}}}1*/
 /*FUNCTION Penpair::PenaltyCreateKMatrix {{{1*/
 void  Penpair::PenaltyCreateKMatrix(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type){
Index: /issm/trunk/src/c/objects/Loads/Penpair.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Penpair.h	(revision 4006)
+++ /issm/trunk/src/c/objects/Loads/Penpair.h	(revision 4007)
@@ -17,6 +17,6 @@
 
 	private: 
-
 		int		id;
+		int analysis_type;
 		
 		Hook hnodes;  //hook to 2 nodes
@@ -24,33 +24,36 @@
 	public:
 
+		/*constructors: {{{1*/
 		Penpair();
-		Penpair(int penpair_id,int* penpair_node_ids);
-		Penpair(int penpair_id,Hook* penpair_hnodes);
+		Penpair(int penpair_id,int* penpair_node_ids,int analysis_type);
+		Penpair(int penpair_id,Hook* penpair_hnodes,int analysis_type);
 		~Penpair();
-
+		Object* copy();
+		/*}}}*/
+		/*object management: {{{1*/
+		void  Configure(DataSet* elements,DataSet* loads,DataSet* nodes,DataSet* vertices,DataSet* materials,Parameters* parameters);
+		void  DeepEcho();
+		void  Demarshall(char** pmarshalled_dataset);
 		void  Echo();
-		void  DeepEcho();
+		int   Enum();
+		int   Id(); 
 		void  Marshall(char** pmarshalled_dataset);
 		int   MarshallSize();
-		void  Demarshall(char** pmarshalled_dataset);
-		int   Enum();
-		int   Id(); 
 		int   MyRank();
-		void  Configure(DataSet* elements,DataSet* loads,DataSet* nodes,DataSet* vertices,DataSet* materials,Parameters* parameters);
+		void  UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void  UpdateInputsFromVector(int* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void  UpdateInputsFromVector(bool* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void  UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void  UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void  UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+		void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
+		bool  InAnalysis(int analysis_type);
+		/*}}}*/
+		/*numerics: {{{1*/
 		void  CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type);
 		void  CreatePVector(Vec pg, int analysis_type,int sub_analysis_type);
 		void  PenaltyCreateKMatrix(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type);
 		void  PenaltyCreatePVector(Vec pg,double kmax,int analysis_type,int sub_analysis_type);
-		Object* copy();
-		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
-		void    UpdateInputsFromVector(int* vector, int name, int type){ISSMERROR("Not implemented yet!");}
-		void    UpdateInputsFromVector(bool* vector, int name, int type){ISSMERROR("Not implemented yet!");}
-		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
-		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
-		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
-		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
-		bool    InAnalysis(int analysis_type);
-
-
+		/*}}}*/
 };
 
