Index: /issm/trunk/src/c/objects/Penpair.cpp
===================================================================
--- /issm/trunk/src/c/objects/Penpair.cpp	(revision 3593)
+++ /issm/trunk/src/c/objects/Penpair.cpp	(revision 3594)
@@ -26,18 +26,21 @@
 /*}}}1*/
 /*FUNCTION Penpair::creation {{{1*/
-Penpair::Penpair(int	penpair_id, double penpair_penalty_offset,int  penpair_penalty_lock,int penpair_node_ids[2],int penpair_dof){
-	
-	int i;
-	id=penpair_id;
-	penalty_offset =penpair_penalty_offset;
-	penalty_lock  =penpair_penalty_lock;
-
-	for(i=0;i<2;i++){
-		node_ids[i]=penpair_node_ids[i];
-		node_offsets[i]=UNDEF;
-		nodes[i]=NULL;
-
-	}
-	dof=penpair_dof;
+Penpair::Penpair(int penpair_id, int* penpair_node_ids):
+	hnodes(penpair_node_ids,2)
+{
+
+	/*all the initialization has been done by the initializer, just fill in the id: */
+	this->id=penpair_id;
+	
+	return;
+}
+/*}}}1*/
+/*FUNCTION Penpair::creation {{{1*/
+Penpair::Penpair(int penpair_id, Hook* penpair_hnodes):
+	hnodes(penpair_hnodes)
+{
+
+	/*all the initialization has been done by the initializer, just fill in the id: */
+	this->id=penpair_id;
 	
 	return;
@@ -51,4 +54,46 @@
 		
 /*Object marshall*/
+/*FUNCTION Penpair::Configure {{{1*/
+
+void  Penpair::Configure(void* pelementsin,void* pnodesin,void* pmaterialsin){
+
+	DataSet* nodesin=NULL;
+
+	/*Recover pointers :*/
+	nodesin=(DataSet*)pnodesin;
+
+	/*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective 
+	 * datasets, using internal ids and offsets hidden in hooks: */
+	hnodes.configure(nodesin);
+
+}
+/*}}}1*/
+/*FUNCTION Penpair::copy {{{1*/
+Object* Penpair::copy() {
+	return new Penpair(this->id,&this->hnodes); 
+}
+/*}}}1*/
+/*FUNCTION Penpair::DeepEcho {{{1*/
+void Penpair::DeepEcho(void){
+
+	printf("Penpair:\n");
+	printf("   id: %i\n",id);
+	hnodes.DeepEcho();
+
+	return;
+}		
+/*}}}1*/
+/*FUNCTION Penpair::Echo {{{1*/
+void Penpair::Echo(void){
+
+	int i;
+
+	printf("Penpair:\n");
+	printf("   id: %i\n",id);
+	hnodes.Echo();
+	
+	return;
+}
+/*}}}1*/
 /*FUNCTION Penpair::Marshall {{{1*/
 void  Penpair::Marshall(char** pmarshalled_dataset){
@@ -68,9 +113,7 @@
 	/*marshall Penpair data: */
 	memcpy(marshalled_dataset,&id,sizeof(id));marshalled_dataset+=sizeof(id);
-	memcpy(marshalled_dataset,&penalty_offset,sizeof(penalty_offset));marshalled_dataset+=sizeof(penalty_offset);
-	memcpy(marshalled_dataset,&penalty_lock,sizeof(penalty_lock));marshalled_dataset+=sizeof(penalty_lock);
-	memcpy(marshalled_dataset,&dof,sizeof(dof));marshalled_dataset+=sizeof(dof);
-	memcpy(marshalled_dataset,&node_ids,sizeof(node_ids));marshalled_dataset+=sizeof(node_ids);
-	memcpy(marshalled_dataset,&node_offsets,sizeof(node_offsets));marshalled_dataset+=sizeof(node_offsets);
+
+	/*Marshall hooks*/
+	hnodes.Marshall(&marshalled_dataset);
 
 	*pmarshalled_dataset=marshalled_dataset;
@@ -82,10 +125,6 @@
 
 	return sizeof(id)+
-		sizeof(penalty_offset)+
-		sizeof(penalty_lock)+
-		sizeof(dof)+
-		sizeof(node_ids)+
-		sizeof(node_offsets)+
-		sizeof(int); //sizeof(int) for enum type
+		+hnodes.MarshallSize()
+		+sizeof(int); //sizeof(int) for enum type
 }
 /*}}}1*/
@@ -103,13 +142,7 @@
 
 	memcpy(&id,marshalled_dataset,sizeof(id));marshalled_dataset+=sizeof(id);
-	memcpy(&penalty_offset,marshalled_dataset,sizeof(penalty_offset));marshalled_dataset+=sizeof(penalty_offset);
-	memcpy(&penalty_lock,marshalled_dataset,sizeof(penalty_lock));marshalled_dataset+=sizeof(penalty_lock);
-	memcpy(&dof,marshalled_dataset,sizeof(dof));marshalled_dataset+=sizeof(dof);
-	memcpy(&node_ids,marshalled_dataset,sizeof(node_ids));marshalled_dataset+=sizeof(node_ids);
-	memcpy(&node_offsets,marshalled_dataset,sizeof(node_offsets));marshalled_dataset+=sizeof(node_offsets);
-
-	for(i=0;i<2;i++){
-		nodes[i]=NULL;
-	}
+
+	/*demarshall hooks: */
+	hnodes.Demarshall(&marshalled_dataset);
 
 	/*return: */
@@ -118,26 +151,11 @@
 }
 /*}}}1*/
+/*FUNCTION Penpair::UpdateFromInputs {{{1*/
+void  Penpair::UpdateFromInputs(void* inputs){
+	
+}
+/*}}}1*/
 
 /*Object functions*/
-/*FUNCTION Penpair::Configure {{{1*/
-
-void  Penpair::Configure(void* pelementsin,void* pnodesin,void* pmaterialsin){
-
-	DataSet* elementsin=NULL;
-	DataSet* nodesin=NULL;
-
-	/*Recover pointers :*/
-	elementsin=(DataSet*)pelementsin;
-	nodesin=(DataSet*)pnodesin;
-	/*Link this load with its nodes: */
-	ResolvePointers((Object**)nodes,node_ids,node_offsets,2,nodesin);
-
-}
-/*}}}1*/
-/*FUNCTION Penpair::copy {{{1*/
-Object* Penpair::copy() {
-	return new Penpair(*this); 
-}
-/*}}}1*/
 /*FUNCTION Penpair::CreateKMatrix {{{1*/
 
@@ -155,42 +173,4 @@
 	return;
 
-}
-/*}}}1*/
-/*FUNCTION Penpair::DeepEcho {{{1*/
-void Penpair::DeepEcho(void){
-
-	int i;
-
-	printf("Penpair:\n");
-	printf("   id: %i\n",id);
-	printf("   penalty_offset: %g\n",penalty_offset);
-	printf("   penalty_lock: %i\n",penalty_lock);
-	printf("   node_ids: [%i %i]\n",node_ids[0],node_ids[1]);
-	printf("   node_offsets: [%i %i]\n",node_offsets[0],node_offsets[1]);
-	printf("   dof: %i\n",dof);
-	
-	for(i=0;i<2;i++){
-		if(nodes[i])nodes[i]->Echo();
-	}
-	return;
-}		
-/*}}}1*/
-/*FUNCTION Penpair::Echo {{{1*/
-void Penpair::Echo(void){
-
-	int i;
-
-	printf("Penpair:\n");
-	printf("   id: %i\n",id);
-	printf("   penalty_offset: %g\n",penalty_offset);
-	printf("   penalty_lock: %i\n",penalty_lock);
-	printf("   node_ids: [%i %i]\n",node_ids[0],node_ids[1]);
-	printf("   node_offsets: [%i %i]\n",node_offsets[0],node_offsets[1]);
-	printf("   dof: %i\n",dof);
-	
-	for(i=0;i<2;i++){
-		if(nodes[i])nodes[i]->Echo();
-	}
-	return;
 }
 /*}}}1*/
@@ -229,7 +209,2 @@
 }
 /*}}}1*/
-/*FUNCTION Penpair::UpdateFromInputs {{{1*/
-void  Penpair::UpdateFromInputs(void* inputs){
-	
-}
-/*}}}1*/
Index: /issm/trunk/src/c/objects/Penpair.h
===================================================================
--- /issm/trunk/src/c/objects/Penpair.h	(revision 3593)
+++ /issm/trunk/src/c/objects/Penpair.h	(revision 3594)
@@ -15,19 +15,12 @@
 
 		int		id;
-		double  penalty_offset; //penalty used
-		int     penalty_lock;  //maximum counter can go until locks the penalty.
 		
-		/*nodes: */
-		int     node_ids[2];
-		Node*   nodes[2];
-		int     node_offsets[2];
-
-		/*penalty pairing of one dof: */
-		int     dof;
+		Hook hnodes;  //hook to 2 nodes
 
 	public:
 
 		Penpair();
-		Penpair(int	id, double penalty_offset,int  penalty_lock,int nodes_ids[2],int dof);
+		Penpair(int penpair_id,int* penpair_node_ids);
+		Penpair(int penpair_id,Hook* penpair_hnodes);
 		~Penpair();
 
Index: /issm/trunk/src/c/objects/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Tria.cpp	(revision 3593)
+++ /issm/trunk/src/c/objects/Tria.cpp	(revision 3594)
@@ -110,6 +110,4 @@
 /*FUNCTION Tria::Configure {{{1*/
 void  Tria::Configure(void* ploadsin,void* pnodesin,void* pmaterialsin,void* pparametersin){
-
-	int i;
 
 	DataSet* loadsin=NULL;
