Index: /issm/trunk-jpl/src/c/classes/DofIndexing.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 15197)
+++ /issm/trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 15198)
@@ -27,4 +27,5 @@
 	this->ssize    = UNDEF;
 	this->clone    = false;
+	this->active   = true;
 	this->f_set    = NULL;
 	this->s_set    = NULL;
@@ -47,8 +48,9 @@
 DofIndexing::DofIndexing(DofIndexing* in){ //copy constructor
 
-	this->gsize = in->gsize;
-	this->fsize = in->fsize;
-	this->ssize = in->ssize;
-	this->clone = in->clone;
+	this->gsize  = in->gsize;
+	this->fsize  = in->fsize;
+	this->ssize  = in->ssize;
+	this->clone  = in->clone;
+	this->active = in->active;
 
 	if(this->gsize>0){
@@ -158,4 +160,17 @@
 }
 /*}}}*/
+/*FUNCTION DofIndexing::Deactivate{{{*/
+void DofIndexing::Deactivate(void){
+	this->active = false;
+
+	/*Constrain to 0. at this point*/
+	for(int i=0;i<this->gsize;i++){
+		this->f_set[i]    = false;
+		this->s_set[i]    = true;
+		this->svalues[i]  = 0.; 
+	}
+	return;
+}
+/*}}}*/
 
 /*Some of the Object functionality: */
@@ -164,6 +179,7 @@
 
 	_printf_("DofIndexing:\n");
-	_printf_("   gsize: " << gsize << "\n");
-	_printf_("   clone: " << clone << "\n");
+	_printf_("   gsize:  " << gsize << "\n");
+	_printf_("   clone:  " << clone << "\n");
+	_printf_("   active: " << active << "\n");
 }
 /*}}}*/
@@ -174,8 +190,9 @@
 
 	_printf_("DofIndexing:\n");
-	_printf_("   gsize: " << gsize << "\n");
-	_printf_("   fsize: " << fsize << "\n");
-	_printf_("   ssize: " << ssize << "\n");
-	_printf_("   clone: " << clone << "\n");
+	_printf_("   gsize:  " << gsize << "\n");
+	_printf_("   fsize:  " << fsize << "\n");
+	_printf_("   ssize:  " << ssize << "\n");
+	_printf_("   clone:  " << clone << "\n");
+	_printf_("   active: " << active << "\n");
 
 	_printf_("   set membership: f,s sets \n");
Index: /issm/trunk-jpl/src/c/classes/DofIndexing.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/DofIndexing.h	(revision 15197)
+++ /issm/trunk-jpl/src/c/classes/DofIndexing.h	(revision 15198)
@@ -4,5 +4,5 @@
 
 #ifndef _DOFINDEXING_H_
-#define  _DOFINDEXING_H_
+#define _DOFINDEXING_H_
 
 #include "../shared/Numerics/types.h"
@@ -19,4 +19,5 @@
 		/*partitioning: */
 		bool clone;   //this node is replicated from another one
+		bool active;  //Is this node active or inactive (all dofs are constrained)
 
 		/*boundary conditions sets: */
@@ -48,4 +49,5 @@
 		/*DofIndexing management: {{{*/
 		DofIndexing* Spawn(int* indices, int numindices);
+		void Deactivate(void);
 		/*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/Node.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 15197)
+++ /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 15198)
@@ -68,7 +68,5 @@
 	if (!iomodel->Data(MaskVertexonwaterEnum)) _error_("iomodel->nodeonwater is NULL");
 	if (reCast<bool>(iomodel->Data(MaskVertexonwaterEnum)[io_index])){
-		for(k=1;k<=gsize;k++){
-			this->FreezeDof(k);
-		}
+		this->Deactivate();
 	}
 
@@ -86,12 +84,12 @@
 			_assert_(iomodel->Data(FlowequationVertexEquationEnum));
 			if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==MacAyealApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
-				for(k=1;k<=gsize;k++) this->FreezeDof(k);
+				this->Deactivate();
 			}
 			if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==L1L2ApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
-				for(k=1;k<=gsize;k++) this->FreezeDof(k);
+				this->Deactivate();
 			}
 			if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==MacAyealPattynApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){
 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
-					for(k=1;k<=gsize;k++) this->FreezeDof(k);
+					this->Deactivate();
 				}
 			}
@@ -104,7 +102,5 @@
 		/*spc all nodes on hutter*/
 		if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==HutterApproximationEnum){
-			for(k=1;k<=gsize;k++){
-				this->FreezeDof(k);
-			}
+			this->Deactivate();
 		}
 	}
@@ -116,7 +112,5 @@
 		/*Constrain all nodes that are not Hutter*/
 		if (reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index])!=HutterApproximationEnum){
-			for(k=1;k<=gsize;k++){
-				this->FreezeDof(k);
-			}
+			this->Deactivate();
 		}
 	}
@@ -134,7 +128,5 @@
 			_assert_(iomodel->Data(MeshVertexonbedEnum));
 			if (!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){
-				for(k=1;k<=gsize;k++){
-					this->FreezeDof(k);
-				}
+				this->Deactivate();
 			}
 		}
@@ -497,4 +489,11 @@
 
 	DofInSSet(dof-1); //with 0 displacement for this dof.
+
+}
+/*}}}*/
+/*FUNCTION Node::Deactivate{{{*/
+void  Node::Deactivate(void){
+
+	indexing.Deactivate();
 
 }
Index: /issm/trunk-jpl/src/c/classes/Node.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.h	(revision 15197)
+++ /issm/trunk-jpl/src/c/classes/Node.h	(revision 15198)
@@ -87,4 +87,5 @@
 		void   GetLocalDofList(int* poutdoflist,int approximation_enum,int setenum);
 		void   FreezeDof(int dof);
+		void   Deactivate(void);
 		int    IsFloating();
 		int    IsGrounded();
