Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 26144)
@@ -56,5 +56,5 @@
 
 	for(int i=0;i<numnodes;i++){
-		if(nodes[i]->fsize) return true;
+		if(nodes[i]->FSize()) return true;
 	}
 	return false;
@@ -3383,5 +3383,5 @@
 			switch(set2_enum){
 				case FsetEnum:
-					if(nodes[i]->fsize){
+					if(nodes[i]->FSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
@@ -3399,5 +3399,5 @@
 					break;
 				case SsetEnum:
-					if(nodes[i]->ssize){
+					if(nodes[i]->SSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
Index: /issm/trunk-jpl/src/c/classes/Loads/Channel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Channel.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Loads/Channel.cpp	(revision 26144)
@@ -320,5 +320,5 @@
 			switch(set2_enum){
 				case FsetEnum:
-					if(nodes[i]->fsize){
+					if(nodes[i]->FSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
@@ -336,5 +336,5 @@
 					break;
 				case SsetEnum:
-					if(nodes[i]->ssize){
+					if(nodes[i]->SSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
Index: /issm/trunk-jpl/src/c/classes/Loads/Moulin.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Moulin.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Loads/Moulin.cpp	(revision 26144)
@@ -291,5 +291,5 @@
 		switch(set2_enum){
 			case FsetEnum:
-				if(node->fsize){
+				if(node->FSize()){
 					if(this->node->IsClone())
 					 o_nz += 1;
@@ -307,5 +307,5 @@
 				break;
 			case SsetEnum:
-				if(node->ssize){
+				if(node->SSize()){
 					if(this->node->IsClone())
 					 o_nz += 1;
Index: /issm/trunk-jpl/src/c/classes/Loads/Neumannflux.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Neumannflux.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Loads/Neumannflux.cpp	(revision 26144)
@@ -306,5 +306,5 @@
 			switch(set2_enum){
 				case FsetEnum:
-					if(nodes[i]->fsize){
+					if(nodes[i]->FSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
@@ -322,5 +322,5 @@
 					break;
 				case SsetEnum:
-					if(nodes[i]->ssize){
+					if(nodes[i]->SSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
Index: /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 26144)
@@ -430,5 +430,5 @@
 			switch(set2_enum){
 				case FsetEnum:
-					if(nodes[i]->fsize){
+					if(nodes[i]->FSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
@@ -446,5 +446,5 @@
 					break;
 				case SsetEnum:
-					if(nodes[i]->ssize){
+					if(nodes[i]->SSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
Index: /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 26144)
@@ -294,5 +294,5 @@
 		switch(set2_enum){
 			case FsetEnum:
-				if(node->fsize){
+				if(node->FSize()){
 					if(this->node->IsClone())
 					 o_nz += 1;
@@ -310,5 +310,5 @@
 				break;
 			case SsetEnum:
-				if(node->ssize){
+				if(node->SSize()){
 					if(this->node->IsClone())
 					 o_nz += 1;
Index: /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 26144)
@@ -235,5 +235,5 @@
 			switch(set2_enum){
 				case FsetEnum:
-					if(nodes[i]->fsize){
+					if(nodes[i]->FSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
@@ -251,5 +251,5 @@
 					break;
 				case SsetEnum:
-					if(nodes[i]->ssize){
+					if(nodes[i]->SSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
Index: /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 26144)
@@ -392,5 +392,5 @@
 			switch(set2_enum){
 				case FsetEnum:
-					if(nodes[i]->fsize){
+					if(nodes[i]->FSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
@@ -408,5 +408,5 @@
 					break;
 				case SsetEnum:
-					if(nodes[i]->ssize){
+					if(nodes[i]->SSize()){
 						if(this->nodes[i]->IsClone())
 						 o_nz += 1;
Index: /issm/trunk-jpl/src/c/classes/Node.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 26144)
@@ -20,6 +20,4 @@
 	this->approximation  = 0;
 	this->gsize          = -1;
-	this->fsize          = -1;
-	this->ssize          = -1;
 	this->clone          = false;
 	this->active         = true;
@@ -69,6 +67,4 @@
 		this->gdoflist       = xNew<int>(this->gsize);
 		this->gdoflist_local = xNew<int>(this->gsize);
-		this->fsize          = -1;
-		this->ssize          = -1;
 		this->fdoflist       = xNew<int>(this->gsize);
 		this->sdoflist       = xNew<int>(this->gsize);
@@ -82,6 +78,4 @@
 		this->gdoflist       = NULL;
 		this->gdoflist_local = NULL;
-		this->fsize          = -1;
-		this->ssize          = -1;
 		this->fdoflist       = NULL;
 		this->sdoflist       = NULL;
@@ -215,6 +209,4 @@
 	output->indexingupdate = this->indexingupdate;
 	output->gsize  = this->gsize;
-	output->fsize  = this->fsize;
-	output->ssize  = this->ssize;
 	output->clone  = this->clone;
 	output->active = this->active;
@@ -264,6 +256,4 @@
 
 	marshallhandle->call(this->gsize);
-	marshallhandle->call(this->fsize);
-	marshallhandle->call(this->ssize);
 	marshallhandle->call(this->clone);
 	marshallhandle->call(this->active);
@@ -292,6 +282,4 @@
 	_printf_("   indexingupdate: " << indexingupdate << "\n");
 	_printf_("   gsize:  " << gsize << "\n");
-	_printf_("   fsize:  " << fsize << "\n");
-	_printf_("   ssize:  " << ssize << "\n");
 	_printf_("   clone:  " << clone << "\n");
 	_printf_("   active: " << active << "\n");
@@ -303,5 +291,5 @@
 	for(i=0;i<gsize;i++) _printf_((s_set[i]?1:0)<< " ");
 	_printf_("]\n");
-	_printf_("   svalues (" << this->ssize << "): |");
+	_printf_("   svalues: |");
 	for(i=0;i<this->gsize;i++){
 		if(this->s_set[i])_printf_(" " << svalues[i] << " |");
@@ -351,6 +339,4 @@
 	_printf_("   indexingupdate: " << indexingupdate << "\n");
 	_printf_("   gsize:  " << gsize << "\n");
-	_printf_("   fsize:  " << fsize << "\n");
-	_printf_("   ssize:  " << ssize << "\n");
 	_printf_("   clone:  " << clone << "\n");
 	_printf_("   active: " << active << "\n");
@@ -479,5 +465,5 @@
 void Node::CreateNodalConstraints(Vector<IssmDouble>* ys){/*{{{*/
 
-	if(this->ssize){
+	if(this->SSize()){
 		/*Add values into constraint vector: */
 		ys->SetValues(this->gsize,this->sdoflist,this->svalues,INS_VAL);
@@ -555,6 +541,6 @@
 	if(approximation_enum==NoneApproximationEnum){
 		if      (setenum==GsetEnum) numdofs=this->gsize;
-		else if (setenum==FsetEnum) numdofs=this->fsize;
-		else if (setenum==SsetEnum) numdofs=this->ssize;
+		else if (setenum==FsetEnum) numdofs=this->FSize();
+		else if (setenum==SsetEnum) numdofs=this->SSize();
 		else _error_("set of enum type " << EnumToStringx(setenum) << " not supported yet!");
 	}
@@ -576,5 +562,5 @@
 				}
 			}
-			else numdofs=this->fsize;
+			else numdofs=this->FSize();
 		}
 		else if (setenum==SsetEnum){
@@ -585,5 +571,5 @@
 				}
 			}
-			else numdofs=this->ssize;
+			else numdofs=this->SSize();
 		}
 		else _error_("set of enum type " << EnumToStringx(setenum) << " not supported yet!");
@@ -628,7 +614,11 @@
 	if(this->IsClone()) return;
 
-	if(this->fsize){
-		int*        indices = xNew<int>(this->fsize);
-		IssmDouble* values  = xNew<IssmDouble>(this->fsize);
+	/*Get F size and S size*/
+	int fsize = this->FSize();
+	int ssize = this->SSize();
+
+	if(fsize){
+		int*        indices = xNew<int>(fsize);
+		IssmDouble* values  = xNew<IssmDouble>(fsize);
 
 		int count = 0;
@@ -643,12 +633,12 @@
 			}
 		}
-		ug->SetValues(this->fsize,indices,values,INS_VAL);
+		ug->SetValues(fsize,indices,values,INS_VAL);
 
 		xDelete<IssmDouble>(values);
 		xDelete<int>(indices);
 	}
-	if(this->ssize){
-		int*        indices = xNew<int>(this->ssize);
-		IssmDouble* values  = xNew<IssmDouble>(this->ssize);
+	if(ssize){
+		int*        indices = xNew<int>(ssize);
+		IssmDouble* values  = xNew<IssmDouble>(ssize);
 
 		int count = 0;
@@ -663,5 +653,5 @@
 			}
 		}
-		ug->SetValues(this->ssize,indices,values,INS_VAL);
+		ug->SetValues(ssize,indices,values,INS_VAL);
 		
 		xDelete<IssmDouble>(values);
@@ -676,7 +666,10 @@
 	if(this->IsClone()) return;
 
-	if(this->fsize){
-		int*        indices = xNew<int>(this->fsize);
-		IssmDouble* values  = xNew<IssmDouble>(this->fsize);
+	/*Get F size*/
+	int fsize = this->FSize();
+
+	if(fsize){
+		int*        indices = xNew<int>(fsize);
+		IssmDouble* values  = xNew<IssmDouble>(fsize);
 
 		int count = 0;
@@ -692,6 +685,6 @@
 			}
 		}
-		_assert_(count==this->fsize);
-		uf->SetValues(this->fsize,indices,values,INS_VAL);
+		_assert_(count==fsize);
+		uf->SetValues(fsize,indices,values,INS_VAL);
 
 		xDelete<IssmDouble>(values);
@@ -702,20 +695,4 @@
 
 /* indexing routines:*/
-void Node::AllocateDofLists(int setenum){/*{{{*/
-
-	/*Initialize: */
-	int size=0;
-
-	if(setenum==FsetEnum){
-		for(int i=0;i<this->gsize;i++) if(f_set[i])size++;
-		this->fsize=size;
-	}
-	else if(setenum==SsetEnum){
-		for(int i=0;i<this->gsize;i++) if(s_set[i])size++;
-		this->ssize=size;
-	}
-	/*TODO, we should never be here for GSET! add an assert and track down whether this happens*/
-}
-/*}}}*/
 void Node::DistributeLocalDofs(int* pdofcount,int setenum){/*{{{*/
 
@@ -729,5 +706,4 @@
 	}
 	else if(setenum==FsetEnum){
-		_assert_(this->fsize==0 || this->fdoflist_local);
 		for(int i=0;i<this->gsize;i++){
 			if(this->f_set[i]) fdoflist_local[i]=dofcount++;
@@ -736,5 +712,4 @@
 	}
 	else if(setenum==SsetEnum){
-		_assert_(this->ssize==0 || this->sdoflist_local);
 		for(int i=0;i<this->gsize;i++){
 			if(this->s_set[i]) sdoflist_local[i]=dofcount++;
@@ -758,5 +733,4 @@
 	}
 	else if(setenum==FsetEnum){
-		_assert_(this->fsize==0 || this->fdoflist);
 		for(int i=0;i<this->gsize;i++){
 			if(this->f_set[i]) fdoflist[i]=this->fdoflist_local[i]+dofcount;
@@ -765,5 +739,4 @@
 	}
 	else if(setenum==SsetEnum){
-		_assert_(this->ssize==0 || this->sdoflist);
 		for(int i=0;i<this->gsize;i++){
 			if(this->s_set[i]) sdoflist[i]=this->sdoflist_local[i]+dofcount;
@@ -816,4 +789,22 @@
 }
 /*}}}*/
+int  Node::FSize(void){/*{{{*/
+
+	_assert_(this && this->gdoflist);
+
+	int fsize = 0;
+	for(int i=0;i<this->gsize;i++) if(this->f_set[i]) fsize++;
+	return fsize;
+}
+/*}}}*/
+int  Node::SSize(void){/*{{{*/
+
+	_assert_(this && this->s_set);
+
+	int ssize = 0;
+	for(int i=0;i<this->gsize;i++) if(this->s_set[i]) ssize++;
+	return ssize;
+}
+/*}}}*/
 
 /*Methods inherent to Node: */
Index: /issm/trunk-jpl/src/c/classes/Node.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.h	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Node.h	(revision 26144)
@@ -43,6 +43,4 @@
 		/*sizes: */
 		int gsize;   //number of dofs for a node
-		int fsize;   //number of dofs solver for
-		int ssize;   //number of constrained dofs
 
 		/*Activation*/
@@ -56,5 +54,5 @@
 
 		/*types of dofs: */
-		int        *doftype;   //approximation type of the dofs (used only for coupling), size g_size
+		int  *doftype;   //approximation type of the dofs (used only for coupling), size g_size
 
 		/*list of degrees of freedom: */
@@ -80,5 +78,4 @@
 
 		/*Node numerical routines*/
-		void  AllocateDofLists(int setenum);
 		void  Activate(void);
 		void  ApplyConstraint(int dof,IssmDouble value);
@@ -113,4 +110,6 @@
 		void  VecReduce(Vector<IssmDouble>* uf, IssmDouble* local_ug,int* indices_ug);
 		void  SetApproximation(int in_approximation);
+		int   SSize();
+		int   FSize();
 };
 
Index: /issm/trunk-jpl/src/c/classes/Nodes.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Nodes.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/Nodes.cpp	(revision 26144)
@@ -146,10 +146,4 @@
 	int my_rank   = IssmComm::GetRank();
 	int num_procs = IssmComm::GetSize();
-
-	/*First, allocate dof lists based on fset and sset*/
-	for(Object* & object : this->objects){
-      Node* node = xDynamicCast<Node*>(object);
-		node->AllocateDofLists(setenum);
-	}
 
 	/*Now, Build local dofs for masters first*/
Index: /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 26144)
@@ -22,8 +22,5 @@
 	this->nrows=0;
 	this->values=NULL;
-
-	this->fsize=0;
 	this->fglobaldoflist=NULL;
-	this->ssize=0;
 	this->sglobaldoflist=NULL;
 }
@@ -40,5 +37,4 @@
 	/*intermediaries*/
 	int i,j,counter;
-	int gsize,fsize,ssize;
 
 	/*If one of the two matrix is NULL, we copy the other one*/
@@ -61,5 +57,5 @@
 
 	/*1: Get the new numbering of Ke2 and get size of the new matrix*/
-	gsize=Ke1->nrows;
+	int gsize=Ke1->nrows;
 	for(i=0;i<Ke2->nrows;i++){
 		bool found=false;
@@ -99,12 +95,4 @@
 	}
 
-	/*Fset*/
-	this->fsize=0;
-	for(i=0;i<this->nrows;i++) if(this->fglobaldoflist[i]>=0) this->fsize++;
-
-	/*Sset*/
-	this->ssize=0;
-	for(i=0;i<this->nrows;i++) if(this->sglobaldoflist[i]>=0) this->ssize++;
-
 	/*clean-up*/
 	xDelete<int>(P);
@@ -133,11 +121,6 @@
 	this->values=xNewZeroInit<IssmDouble>(this->nrows*this->nrows);
 
-	/*g list*/
 	this->gglobaldoflist=GetGlobalDofList(nodes,numnodes,GsetEnum,approximation);
-
-	/*get dof lists for f and s set: */
-	this->fsize=GetNumberOfDofs(nodes,numnodes,FsetEnum,approximation);
 	this->fglobaldoflist=GetGlobalDofList(nodes,numnodes,FsetEnum,approximation);
-	this->ssize=GetNumberOfDofs(nodes,numnodes,SsetEnum,approximation);
 	this->sglobaldoflist=GetGlobalDofList(nodes,numnodes,SsetEnum,approximation);
 }
@@ -163,5 +146,11 @@
 	this->CheckConsistency();
 
-	if(this->fsize){
+	/*do we have any component in the F set?*/
+	int fsize = 0;
+	for(int i=0;i<this->nrows;i++){
+		if(this->fglobaldoflist[i]>=0) fsize++;
+	}
+
+	if(fsize){
 		/*first, retrieve values that are in the f-set from the g-set values matrix: */
 		localvalues=xNew<IssmDouble>(this->nrows);
@@ -171,5 +160,5 @@
 
 		/*add local values into global  matrix, using the fglobaldoflist: */
-		pf->SetValues(this->fsize,this->fglobaldoflist,localvalues,ADD_VAL);
+		pf->SetValues(fsize,this->fglobaldoflist,localvalues,ADD_VAL);
 
 		/*Free ressources:*/
@@ -193,11 +182,22 @@
 	this->CheckConsistency();
 
+	/*do we have any component in the F or S set?*/
+   bool is_fset= false;
+	bool is_sset= false;
+   for(int i=0;i<this->nrows;i++){
+      if(this->fglobaldoflist[i]>=0){
+         is_fset = true;
+      }
+		else{
+			_assert_(this->sglobaldoflist[i]>=0);
+			is_sset = true;
+		}
+   }
+
 	/*only use row dofs to add values into global matrices: */
-	if(this->fsize){
-		/*add local values into global  matrix, using the fglobaldoflist: */
+	if(is_fset){
 		Kff->SetValues(this->nrows,this->fglobaldoflist,this->nrows,this->fglobaldoflist,this->values,ADD_VAL);
 	}
-
-	if((this->ssize!=0) && (this->fsize!=0)){
+	if(is_fset && is_sset){
 		Kfs->SetValues(this->nrows,this->fglobaldoflist,this->nrows,this->sglobaldoflist,this->values,ADD_VAL);
 	}
@@ -212,5 +212,14 @@
 	this->CheckConsistency();
 
-	if(this->fsize){
+	/*do we have any component in the F set?*/
+	bool isfset= false;
+	for(int i=0;i<this->nrows;i++){
+		if(this->fglobaldoflist[i]>=0){
+			isfset = true;
+			break;
+		}
+   }
+
+	if(isfset){
 		Jff->SetValues(this->nrows,this->fglobaldoflist,this->nrows,this->fglobaldoflist,this->values,ADD_VAL);
 	}
@@ -246,9 +255,7 @@
 	if(gglobaldoflist) for(i=0;i<nrows;i++) _printf_(" " << gglobaldoflist[i]); _printf_("\n");
 
-	_printf_("   fsize: " << fsize << "\n");
 	_printf_("   fglobaldoflist  (" << fglobaldoflist << "): ");
 	for(i=0;i<nrows;i++)_printf_(" " << fglobaldoflist[i]); _printf_(" \n");
 
-	_printf_("   ssize: " << ssize << "\n");
 	_printf_("   sglobaldoflist  (" << sglobaldoflist << "): ");
 	for(i=0;i<nrows;i++)_printf_(" " << sglobaldoflist[i]); _printf_(" \n");
@@ -267,10 +274,6 @@
 	this->gglobaldoflist=xNew<int>(this->nrows);
 	xMemCpy<int>(this->gglobaldoflist,Ke->gglobaldoflist,this->nrows);
-
-	this->fsize=Ke->fsize;
 	this->fglobaldoflist=xNew<int>(this->nrows);
 	xMemCpy<int>(this->fglobaldoflist,Ke->fglobaldoflist,this->nrows);
-
-	this->ssize=Ke->ssize;
 	this->sglobaldoflist=xNew<int>(this->nrows);
 	xMemCpy<int>(this->sglobaldoflist,Ke->sglobaldoflist,this->nrows);
Index: /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.h	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.h	(revision 26144)
@@ -23,6 +23,4 @@
 		int *fglobaldoflist;
 		int *sglobaldoflist;
-		int  fsize;
-		int  ssize;
 
 	public:
Index: /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 26144)
@@ -120,8 +120,14 @@
 	this->CheckConsistency();
 
-	/*Get size of Fset*/
-   int fsize = 0; for(int i=0;i<this->nrows;i++) if(this->fglobaldoflist[i]>=0) fsize++;
-
-	if(fsize){
+	/*do we have any component in the F set?*/
+	bool isfset= false;
+	for(int i=0;i<this->nrows;i++){
+		if(this->fglobaldoflist[i]>=0){
+			isfset = true;
+			break;
+		}
+	}
+
+	if(isfset){
 		pf->SetValues(this->nrows,this->fglobaldoflist,this->values,ADD_VAL);
 	}
@@ -176,8 +182,14 @@
 void ElementVector::InsertIntoGlobal(Vector<IssmDouble>* pf){/*{{{*/
 
-	/*Get size of Fset*/
-	int fsize = 0; for(int i=0;i<this->nrows;i++) if(this->fglobaldoflist[i]>=0) fsize++;
-
-	if(fsize){
+	/*do we have any component in the F set?*/
+	bool isfset= false;
+	for(int i=0;i<this->nrows;i++){
+		if(this->fglobaldoflist[i]>=0){
+			isfset = true;
+			break;
+		}
+	}
+
+	if(isfset){
 		/*add local values into global  vector, using the fglobaldoflist: */
 		pf->SetValues(this->nrows,this->fglobaldoflist,this->values,INS_VAL);
Index: /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 26143)
+++ /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 26144)
@@ -256,5 +256,6 @@
 			int   lid = node->Lid();
 			if(!node->IsClone()){
-				for(j=0;j<node->fsize;j++){
+				int node_fsize = node->FSize();
+				for(j=0;j<node_fsize;j++){
 					_assert_(count<m);
 					d_nnz[count]=numberofdofspernode*(d_connectivity[lid] + reCast<int>(serial_connectivity_clone[lid]));
