Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 25383)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 25384)
@@ -3369,5 +3369,5 @@
 }
 /*}}}*/
-void       Element::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){/*{{{*/
+void       Element::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int* flagsindices_counter,int set1_enum,int set2_enum){/*{{{*/
 
 	/*Intermediaries*/
@@ -3386,7 +3386,6 @@
 			flags[this->nodes[i]->Lid()]=true;
 
-			int counter=0;
-			while(flagsindices[counter]>=0) counter++;
-			flagsindices[counter]=this->nodes[i]->Lid();
+			flagsindices[flagsindices_counter[0]]=this->nodes[i]->Lid();
+			flagsindices_counter[0]++;
 
 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 25383)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 25384)
@@ -164,5 +164,5 @@
 		void               ResultToMatrix(IssmDouble* values,int ncols,int output_enum);
 		void               ResultToVector(Vector<IssmDouble>* vector,int output_enum);
-		void               SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
+		void               SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int* flagsindices_counter,int set1_enum,int set2_enum);
 		void               SetBoolInput(Inputs* inputs,int enum_in,bool value);
 
Index: /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 25383)
+++ /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 25384)
@@ -170,12 +170,13 @@
 
 	/*OK now count number of dofs and flag each nodes for each node i*/
-	bool *flags                  = xNew<bool>(localnumnodes);
-	int  *flagsindices           = xNew<int>(localnumnodes);
-	int  *d_connectivity         = xNewZeroInit<int>(localnumnodes);
-	int  *o_connectivity         = xNewZeroInit<int>(localnumnodes);
+	bool *flags                = xNew<bool>(localnumnodes);
+	int  *flagsindices         = xNew<int>(localnumnodes);
+	int  *d_connectivity       = xNewZeroInit<int>(localnumnodes);
+	int  *o_connectivity       = xNewZeroInit<int>(localnumnodes);
+	int   flagsindices_counter;
 
 	Vector<IssmDouble> *connectivity_clone= new Vector<IssmDouble>(localmasters,numnodes);
 
-	/*Resetting flags to false at eahc iteration takes a lot of time, so we keep track of the flags
+	/*Resetting flags to false at each iteration takes a lot of time, so we keep track of the flags
 	 * to reset in flagsindices, initialized with -1*/
 	for(i = 0;i<localnumnodes;i++) flags[i]        = false;
@@ -198,15 +199,10 @@
 			}
 		}
-
-		//for(j=0;j<localnumnodes;j++) flags[j]=false;
-
-		/*Loop over elements that hold node number i*/
-		//if(head_e[node->Lid()]==-1 && head_l[node->Lid()]==-1){
-		//	printf("[%i] vertex %i\n",IssmComm::GetRank(),node->Lid()+1);
-		//}
+		flagsindices_counter = 0;
+
 		for(j=head_e[node->Lid()];j!=-1;j=next_e[j]){
 			offset=count2offset_e[j];
 			element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(offset));
-			element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
+			element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,&flagsindices_counter,set1enum,set2enum);
 			if(node->IsClone()){
 				connectivity_clone->SetValue(node->Pid(),d_nz+o_nz,ADD_VAL);
